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

时间:2014-09-09 12:01:04

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

我有一个makefile项目,其中包含一些不同的库。其中一个是我静态链接的升级库,以使我的程序可移植。这就是我的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版本的共享库”。

如何能够动态链接某些库和动态链接其他库?

提前致谢

P.S。我已经检查了一些类似的主题,并尝试了一些对我来说无法解决的方法。

2 个答案:

答案 0 :(得分:4)

使用-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 $@

答案 1 :(得分:1)

您可以使用-Bstatic静态链接其后的内容,然后-Bdynamic执行相反的操作。在命令行上需要多次。