我的程序使用gtkmm,gtkglextmm和exiv2。
我想将这些库包含在可执行文件中,因为如果用户在他/她的系统上没有这些库,该应用程序将无法运行。在Windows上.dll文件解决了这个问题(我把它们放在与输出文件相同的目录中)。
如何在Linux上附加类似的库?有什么工具可以帮助吗?我不能强迫用户安装依赖项。
答案 0 :(得分:10)
Linux上的标准做法不是重新分发您的依赖项。这样做只会造成大量重复。您应该在安装包中指定依赖项,并让包管理器解决它们。
答案 1 :(得分:4)
更好的是,使用您要定位的分发[s]的包系统,例如Debian / Ubuntu / Mint上的.deb打包(aptitude
或apt-get
,自己使用dpkg
),Redhat / Fedora上的Yum / Rpm等等。
DLL在Linux上被称为shared libraries(名为*.so
的文件)(ELF格式,使用objdump
,nm
...来探索他们,gcc -fPIC -shared
来构建它们。它们可以通过编程方式加载dlopen& dlsym
。请注意,Windows DLL-s和Windows之间存在重要差异。 Linux * .so(dynamic linking在Windows和Linux上没有相同的含义)
答案 2 :(得分:0)
您可以编写简单的sh脚本来启动程序:
#!/bin/sh
LD_LIBRARY_PATH=/path/to/intall/directory
path/to/your/exe
并将这些库放到/ path / to / intall / directory