静态链接只会提升库 G++

Linking statically only boost library G++

本文关键字:G++ 链接 静态      更新时间:2023-10-16

可能的重复项:
链接时可以混合使用静态库和共享对象库吗?

我想编译我的应用程序,仅静态链接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

但是这个命令链接是静态的!应用程序重量增加了 2mb!

你能告诉我静态编译什么命令只提升库吗?

谢谢!

-lboost_system替换为-Wl,-Bstatic -lboost_system -Wl,-Bdynamic-Wl 选项将它后面的东西按照它在命令行上出现的顺序发送到链接器。

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

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