[英]How to use static library in linux executable
我有一个在Linux上编译的项目。 当我对可执行文件运行ldd
命令时,得到的是:
libevent_core-2.1.so.6 => /usr/lib/x86_64-linux-gnu/libevent_core-2.1.so.6 (0x00007fca87a5e000)
libevent_pthreads-2.1.so.6 => /usr/lib/x86_64-linux-gnu/libevent_pthreads-2.1.so.6 (0x00007fca8785b000)
现在,我想将这些库编译为静态库。 我怎样才能做到这一点?
这是我的make文件库:
LIBS = -levent_core -levent_extra -levent -levent_pthreads -lsystemd
没有makefile魔术可以将共享库变成静态库。 您需要在系统上安装库的静态版本,然后在makefile中指定要链接库的静态版本。
看来您需要安装的静态库是:
libevent_core.a
libevent_extra.a
libevent.a
libevent_pthreads.a
libsystemd.a
安装了这些库之后,您可以通过以下方式修改makefile以静态链接它们:
LIBS = -levent_core -levent_extra -levent -levent_pthreads -lsystemd
至:
LIBS = -Wl,-Bstatic -levent_core -levent_extra -levent -levent_pthreads -lsystemd -Wl,-Bdynamic
但是 ,您不能完全做到这一点,因为没有libsystemd
静态版本。 这就是为什么 。
列表中其他库有静态版本。 您可以通过安装libevent
开发软件包(可能是libevent-dev
或libevent-devel
,具体取决于您的Linux发行版)来安装它们。 然后,您可以将这些链接静态链接为:
LIBS = -Wl,-Bstatic -levent_core -levent_extra -levent -levent_pthreads -Wl,-Bdynamic -lsystemd
注意 , -Wl,-Bstatic
或-Wl,-Bdynamic
中没有空格。 形式为-Wl,...
GCC选项意味着GCC应该将选项...
传递给链接器的调用。
这是链接器选项的文档
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.