可能重复:
链接时可以混合静态和共享对象库吗?
我想编译我的应用程序,静态链接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
),如果它发现在同一个目录中。 它按照给定顺序搜索目录,当它找到一个静态或动态版本的目录时,它将停止。 如果只有一个版本,则不管使用哪一个。