我有一个 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/