我有一个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。我已经检查了一些类似的主题,并尝试了一些对我来说无法解决的方法。
答案 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
执行相反的操作。在命令行上需要多次。