仅静态链接boost库G ++

时间:2013-01-30 13:36:44

标签: c++ linux g++ static-linking

  

可能重复:
  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吗?

谢谢!

2 个答案:

答案 0 :(得分:7)

-lboost_system替换为-Wl,-Bstatic -lboost_system -Wl,-Bdynamic-Wl选项按照它在命令行中显示的顺序将后面的内容发送到链接器。

答案 1 :(得分:2)

有两种解决方案。您可以指定-Bstatic和 命令行中的-Bdynamic,每个都会影响所有 跟随它的图书馆。或者你可以安排它 要链接的库的静态版本 静态地存在于之前搜索的目录中 包含动态版本的目录。这允许 你做出某种全球决定:你创造了 目录一次,以及您之前为其执行-L的所有用户 -L将使用静态版本。

在实践中,我想不出你想要链接的情况 除静态之外的Boost库,所以最简单 解决方案可能只是删除.so文件。唯一的一次 g ++将做出决定(并考虑-Bstatic 如果它同时在同一目录中找到,则为-Bdynamic)。它 按给定顺序搜索目录,并在找到时查找目录 具有静态或动态版本的目录 图书馆,它停止了。如果只有一个版本, 无论如何,它都使用那个。