gpt4 book ai didi

c++ - 如何在linux可执行文件中使用静态库

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:03:20 26 4
gpt4 key购买 nike

我有一个在 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 没有静态版本。 Here's why .

您的列表中有其他库的静态版本。你可以安装它们通过安装 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 应该将选项 ... 传递给它对链接器的调用。

这里是 the documentation of the linker options

关于c++ - 如何在linux可执行文件中使用静态库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52631072/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com