2010-09-13 67 views
46

我有一个链接到很多图书馆的程序。默认情况下,g++更喜欢链接到共享库,即使存在相应的存档。g ++链接器:如果静态库存在,强制静态链接?

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

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

+0

另请参阅:http://stackoverflow.com/questions/4500158/how-can-i-force-linking-with-a-static-library-when-a-shared-library-of-same-name – Antonio 2016-04-13 15:39:19

回答

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

将链接zliblibfoo静态和libbar动态。 --as-needed将删除任何未使用的动态库。

5

当您只想静态链接一个或两个库与其余库(包括系统库)时,它们是动态的,通过全名简单引用静态库往往更容易。即而不是使用-l-L来让g ++从它找到的库中解析出一个库,简单地将库的完整路径作为输入。鉴于以上++命令克,到main.o应用主程序链接到静态libz进行和libfoo的和动态和libbar的等libglib:

``` 克++ main.o /usr/lib/libz.a/usr/lib中/libfoo.a -lbar

编辑17年8月3日: 我刚刚绊倒横跨this answer其进入更多细节,并提供一种替代方法(-l:)来直接指定库。