【问题标题】:g++ linker: force static linking if static library exists?g ++链接器:如果存在静态库,则强制静态链接?
【发布时间】:2011-04-11 12:44:05
【问题描述】:

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

如果存在静态存档,我如何更改此首选项以首选静态存档而不是动态库?​​

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

【问题讨论】:

标签: c++ c linker g++ static-libraries


【解决方案1】:
g++ -Wl,-Bstatic -lz -lfoo -Wl,-Bdynamic -lbar -Wl,--as-needed

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

【讨论】:

    【解决方案2】:

    当您只想将一两个库与其他库(包括系统库)静态链接时,通常更容易通过全名引用静态库。 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:)来直接指定库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多