我有一个链接到许多库的程序。默认情况下,g++
更喜欢链接到共享库,即使存在相应的存档。
如果存在静态存档,如何将此首选项更改为优先于动态库的静态存档?
注意,我使用了-static
选项,但它试图找到所有库的静态存档,这不是我想要的。
答案 0 :(得分:67)
g++ -Wl,-Bstatic -lz -lfoo -Wl,-Bdynamic -lbar -Wl,--as-needed
将zlib
和libfoo
列为静态,libbar
为动态。 --as-needed
将删除任何未使用的动态库。
答案 1 :(得分:5)
当您只想将一个或两个库与其余库(包括系统库)静态链接为动态时,通常更容易通过其全名引用静态库。即而不是使用-l
和-L
来获取g ++从它找到的库中解析库,而是简单地将库的完整路径添加为输入。使用上面的g ++命令,将main.o
应用程序主程序链接到静态libz和libfoo以及动态libbar和libglib等:
g++ main.o /usr/lib/libz.a /usr/lib/libfoo.a -lbar
编辑8月17日:
我刚刚跳过this answer,它会更详细地介绍并提供另一种方法(-l:
)来直接指定库。