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

75

我有一个程序连接了许多库。默认情况下,g++ 偏好于链接共享库,即使对应的存档文件存在也是如此。

如果静态存档存在,我该如何更改这个偏好以优先链接静态存档而不是动态库?

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


另请参阅:https://dev59.com/VG855IYBdhLWcg3wKw9Y - Antonio
2个回答

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

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


13

当你只想静态链接一个或两个库而其余包括系统库在内的其他库都是动态的时,通常最简单的方法是使用完整的名称直接引用静态库。也就是说,不要使用-l-L让g++来解决库的依赖关系,而是将库的完整路径添加为输入。以下是一个示例g++命令,将main.o应用程序主程序与静态库z和foo以及动态库bar和glib等链接:

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

编辑于 8月3日17:我刚刚偶然发现了这个答案,其中详细介绍并提供了另一种方法(-l:)来直接指定库。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接