Linux 上的 .dll 之类的东西 - 如何获取它们?
我有使用 gtkmm、gtkglextmm 和 exiv2 的程序。
我想将这些库包含在可执行文件中,因为如果用户的系统上没有这些库,则应用程序将无法运行。在 Windows 上,.dll 文件解决了这个问题(我将它们放在与输出文件相同的目录中)。
如何在Linux上附加类似的库?有什么工具可以帮助解决这个问题吗?我无法强制用户安装依赖项。
I have program using gtkmm, gtkglextmm and exiv2.
I want to include these libraries with the executable, because the app will not work if user doesn't has them on his/her system. On Windows .dll files solved the matter (I put them in the same directory as output file).
How to attached similar libraries on Linux? Is there any tool helping with that? I cannot force user to install dependencies.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
Linux 上的标准做法是不重新分发依赖项。这样做只会造成大量重复。您应该在安装包中指定依赖项,并让包管理器解析它们。
Standard practice on Linux is not to redistribute your dependencies. Doing so just creates large amounts of duplication. You should instead specify the dependencies in your installation package and let the package manager resolve them.
更好的是,使用您想要定位的发行版的软件包系统,例如 .deb在 Debian/Ubuntu/Mint 上打包(使用
aptitude
或apt-get
,本身使用dpkg
),Redhat/Fedora 上的 Yum/Rpm 等等等DLL-s被称为共享库(文件名为
*.so
) Linux(采用 ELF 格式,使用objdump
,nm
...探索它们,并gcc -fPIC -shared
构建它们)。它们可以通过 dlopen & 以编程方式加载。 dlsym。请注意,Windows DLL-s 和 Windows DLL-s 之间存在重要差异。 Linux *.so(动态链接在 Windows 和 Linux 上的含义不同)Better yet, use the package system of the distribution[s] you want to target, e.g. .deb packaging on Debian/Ubuntu/Mint (with
aptitude
orapt-get
, themselves usingdpkg
), Yum/Rpm on Redhat/Fedora, etc etc.DLL-s are called shared libraries (files named
*.so
) on Linux (in ELF format, useobjdump
,nm
... to explore them, andgcc -fPIC -shared
to build them). They can be programmatically loaded with dlopen &dlsym
. Beware that there are important differences between windows DLL-s & Linux *.so (dynamic linking don't have the same meaning on Windows & Linux)您可以编写简单的sh脚本来启动您的程序:
并将so库放入/path/to/intall/directory
You can write simple sh script to start your program:
and put so libraries to /path/to/intall/directory