繁体   English   中英

如何在Linux可执行文件中使用静态库

[英]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-devlibevent-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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM