可能重复:
Can I mix static and shared-object libraries when linking?
我想编译我的应用程序,仅静态链接boost_system库。其他(glibc等)应该动态链接。我该怎么办?
我的动态编译命令:
g++ -o newserver server.cpp ... -lboost_system -std=c++0x
静态编译的命令:
g++ -static -o newserver server.cpp ... -pthread -lboost_system -std=c++0x
但这个命令静态链接所有!并且app会增加2mb!
你能告诉我静态编译什么命令只能升级lib吗?
谢谢!
答案 0 :(得分:7)
将-lboost_system
替换为-Wl,-Bstatic -lboost_system -Wl,-Bdynamic
。 -Wl
选项按照它在命令行中显示的顺序将后面的内容发送到链接器。
答案 1 :(得分:2)
有两种解决方案。您可以指定-Bstatic
和
命令行中的-Bdynamic
,每个都会影响所有
跟随它的图书馆。或者你可以安排它
要链接的库的静态版本
静态地存在于之前搜索的目录中
包含动态版本的目录。这允许
你做出某种全球决定:你创造了
目录一次,以及您之前为其执行-L
的所有用户
-L
将使用静态版本。
在实践中,我想不出你想要链接的情况
除静态之外的Boost库,所以最简单
解决方案可能只是删除.so
文件。唯一的一次
g ++将做出决定(并考虑-Bstatic
如果它同时在同一目录中找到,则为-Bdynamic
)。它
按给定顺序搜索目录,并在找到时查找目录
具有静态或动态版本的目录
图书馆,它停止了。如果只有一个版本,
无论如何,它都使用那个。