如何在 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)
现在,我想让这些库编译为静态库。我该怎么做?
这是我的制作文件库:
LIBS = -levent_core -levent_extra -levent -levent_pthreads -lsystemd
没有将共享库转换为静态库的生成文件魔法。 您需要在系统上安装库的静态版本,并且 然后,在生成文件中,指定库的静态版本为 被链接。
看起来您需要安装的静态库是:
libevent_core.a
libevent_extra.a
libevent.a
libevent_pthreads.a
libsystemd.a
安装这些库后,您将修改生成文件以链接它们 通过更改静态:
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
中没有空格。形式的 GCC 选项-Wl,...
意味着 GCC 应将选项...
传递给其对链接器的调用。
下面是链接器选项的文档
相关文章:
- 如何在 linux 可执行文件中使用静态库
- 如果包含映射的静态库与可执行文件和动态库链接,静态映射(变量)是否会被多次释放?
- 在链接可执行文件之前查找静态库未解析的依赖项
- 如何在Eclipse Helios中将可执行文件更改为静态库
- CMake 构建静态可执行文件
- 使用LTO静态链接的可执行文件(链接时间优化):如何使用以前构建的库进行制作
- Cython:编译独立的静态可执行文件
- QMAKE:同时使可执行文件和静态lib
- 为什么主可执行文件和 dlopen 加载的共享库共享命名空间静态变量的一个副本?
- CMAKE:将静态库从子目录链接到另一个子目录中的可执行文件
- Paho CPP - 编译为静态可执行文件
- 将静态和动态库链接到同一个可执行文件会导致哪些问题
- 静态库中的符号有时会链接到可执行文件中,有时则不会
- 如何转换一个普通的makefile以创建可以在另一台计算机上使用的静态可执行文件
- 使用boost库在Visual Studio 2010中编译完整的静态可执行文件
- 将Mach-O可执行文件与静态库合并
- 在可执行文件中实现静态方法是否安全,该方法已在共享库中实现
- C++程序上的执行错误:静态可执行文件调用 DLL 库
- 用CMake编译静态可执行文件
- 如何构建依赖于libcurl的静态可执行文件