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

我有一个链接到很多图书馆的程序。 g++默认情况下,即使存在相应的存档,也希望链接到共享库。

如果存在静态存档,如何将此首选项更改为首选dynamic库上的静态存档?

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

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

zliblibfoo链接为静态,并将libbar为dynamic链接。 --as-needed将会删除任何未使用的dynamic库。

当您只想静态链接一个或两个库与其余的库(包括系统库)时,通过全名简单引用静态库通常更容易。 即,而不是使用-l-L来让g ++从它所find的库中parsing一个库,简单地将库的完整path作为input。 以上面的g ++命令,将main.o应用程序主程序链接到静态libz和libfoo以及dynamiclibbar和libglib等。

“`g ++ main.o /usr/lib/libz.a /usr/lib/libfoo.a -lbar

编辑3 8月17日:我只是绊倒这个答案 ,进入更多的细节,并提供了一种替代方法( -l:来直接指定库。