静态链接仅提升库G ++

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

我想编译我的应用程序,静态链接boost_system库。 其他(glibc等)应该dynamic链接。 我该怎么做?

我的命令来dynamic编译:

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替换-lboost_system-Wl选项将它后面的内容按照它在命令行中出现的顺序发送到链接器。

有两个解决方案。 您可以在命令行中指定-Bstatic-Bdynamic ,每个都影响后面的所有库。 或者你可以安排,你想要静态链接的库的静态版本存在于一个目录中,该目录在包含动态版本的目录之前被搜索。 这可以让你做一些全局的决定:你创建目录一次,所有的用户你做一个-L之前-L常规将使用静态版本。

在实践中,我想不出一个你想要连接Boost库而不是静态的情况,所以最简单的解决方案可能就是删除.so文件。 唯一的时候g ++会做出决定(并且考虑到-Bstatic-Bdynamic ),如果它发现在同一个目录中。 它按照给定顺序搜索目录,当它找到一个静态或动态版本的目录时,它将停止。 如果只有一个版本,则不管使用哪一个。