g ++链接器:如果存在静态库,则强制静态链接?

时间:2010-09-13 06:52:18

标签: c++ c linker g++ static-libraries

我有一个链接到许多库的程序。默认情况下,g++更喜欢链接到共享库,即使存在相应的存档。

如果存在静态存档,如何将此首选项更改为优先于动态库的静态存档?

注意,我使用了-static选项,但它试图找到所有库的静态存档,这不是我想要的。

2 个答案:

答案 0 :(得分:67)

g++ -Wl,-Bstatic -lz -lfoo -Wl,-Bdynamic -lbar -Wl,--as-needed

zliblibfoo列为静态,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:)来直接指定库。