g ++连接器:如果静态库存在,强制静态链接?
我有一个链接到很多图书馆的程序。 g++
默认情况下,即使存在相应的存档,也希望链接到共享库。
如果存在静态存档,如何将此首选项更改为首选dynamic库上的静态存档?
请注意,我使用了-static
选项,但它试图find所有库的静态存档,这不是我想要的。
g++ -Wl,-Bstatic -lz -lfoo -Wl,-Bdynamic -lbar -Wl,--as-needed
将zlib
和libfoo
链接为静态,并将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:
来直接指定库。