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