【发布时间】:2011-04-11 12:44:05
【问题描述】:
我有一个链接到许多库的程序。 g++,默认情况下,更喜欢链接到共享库,即使相应的存档存在。
如果存在静态存档,我如何更改此首选项以首选静态存档而不是动态库?
注意,我使用了-static 选项,但它会尝试为所有库查找静态存档,这不是我想要的。
【问题讨论】:
标签: c++ c linker g++ static-libraries
我有一个链接到许多库的程序。 g++,默认情况下,更喜欢链接到共享库,即使相应的存档存在。
如果存在静态存档,我如何更改此首选项以首选静态存档而不是动态库?
注意,我使用了-static 选项,但它会尝试为所有库查找静态存档,这不是我想要的。
【问题讨论】:
标签: c++ c linker g++ static-libraries
g++ -Wl,-Bstatic -lz -lfoo -Wl,-Bdynamic -lbar -Wl,--as-needed
将zlib 和libfoo 链接为静态,libbar 链接为动态。 --as-needed 将删除所有未使用的动态库。
【讨论】:
当您只想将一两个库与其他库(包括系统库)静态链接时,通常更容易通过全名引用静态库。 IE。与其使用-l 和-L 来让g++ 从它找到的内容中解析一个库,不如简单地将库的完整路径添加为输入。使用上面的 g++ 命令,将main.o 应用程序主程序链接到静态 libz 和 libfoo 以及动态 libbar 和 libglib 等:
g++ main.o /usr/lib/libz.a /usr/lib/libfoo.a -lbar
17 年 8 月 3 日编辑:
我刚刚遇到了this answer,它更详细并提供了另一种方法(-l:)来直接指定库。
【讨论】: