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

问题描述 投票:54回答:2

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

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

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

c++ c linker g++ static-libraries
2个回答
68
投票
g++ -Wl,-Bstatic -lz -lfoo -Wl,-Bdynamic -lbar -Wl,--as-needed

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


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:)来直接指定库。

© www.soinside.com 2019 - 2024. All rights reserved.