我有一个在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
答案 0 :(得分:3)
没有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
的静态版本。 Here's why。
列表中的其他库有静态版本。您可以安装它们
通过安装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应该将选项...
传递给链接器调用。