c++ - g++ 同时链接静态库和非静态库

标签 c++ makefile g++ static-linking dynamic-linking

我有一个 makefile 项目,其中包含几个不同的库。其中之一是 boost 库,我静态链接它以使我的程序可移植。这是我的 makefile 命令的样子:

g++ -O0 -g test.cpp testObject.o -pthread -I/home/user/devel/lmx-sdk-4.7.1/include/ -L/home/user/devel/lmx-sdk-4.7.1/linux_x64 -llmxclient -lrt -ldl -lboost_filesystem  -lboost_system -static -static-libgcc -o $@

我还将 lmx-sdk 库链接到我的项目,以便使用许可功能;然而,似乎 lmx-sdk 似乎不喜欢静态链接,因为它给出了一个错误“在静态链接的应用程序中使用‘dlopen’需要在运行时使用来自 glibc 版本的共享库用于链接”。

我怎样才能静态链接一些库而动态链接其他库?

提前致谢

附言我检查了一些类似的主题并尝试了一些对我不起作用的方法。

最佳答案

使用 -Wl,-Bdynamic-Wl,-Bstatic 而不是仅仅使用 -Bdynamic-Bstatic 解决了这个问题。

完整的链接行现在看起来像这样:

g++ -O0 -g test.cpp testObject.o -pthread -Bdynamic -I/home/user/devel/lmx-sdk-4.7.1/include/-L/home/user/devel/lmx -sdk-4.7.1/linux_x64 -llmxclient -lrt -ldl -Wl,-Bstatic -lboost_filesystem -lboost_system -o $@

关于c++ - g++ 同时链接静态库和非静态库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25744120/

相关文章:

c++ - 快速任意精度 c++ 库 : is __float128 faster than MPFR?

c++ - 仅在发布版本中出现异常

node.js - 使用 mocha 设置/拆卸 express.js 应用程序

c++ - g++ 4.9.4 缺少 LLONG_MAX?

c++ - GCC 不喜欢带有空格的 C++ 风格转换

c++ - 为什么 g++ 不在这里启用 RVO?

c++ - 按字节读取 UTF-16 格式的文件到 wstring

linux - 消息队列 makefile 错误 : undefined reference to `mq_open'

c - 为什么这个 makefile 不适用于所有对象?

c++ - w8004 编译器警告 BDS6 c/c++