我有一个链接到许多库的程序。默认情况下,g++
更喜欢链接到共享库,即使存在相应的存档。
如果存在静态存档,如何将此首选项更改为优先于静态存档而不是动态库?
注意,我使用了-static
选项,但它试图找到所有库的静态存档,这不是我想要的。
g++ -Wl,-Bstatic -lz -lfoo -Wl,-Bdynamic -lbar -Wl,--as-needed
将zlib
和libfoo
链接为静态,libbar
为动态。 --as-needed
将删除任何未使用的动态库。
当您只想将一个或两个库与其余库(包括系统库)静态链接为动态时,通常更容易通过其全名引用静态库。即而不是使用-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:
)来直接指定库。