【问题标题】:Static linking with dylib ld: library not found for -lcrt0.o collect2: error: ld returned 1 exit status与 dylib ld 的静态链接:找不到 -lcrt0.o collect2 的库:错误:ld 返回 1 个退出状态
【发布时间】:2017-01-09 17:49:57
【问题描述】:

我正在使用 gnu49 编译一个 qt5 c++ 项目,同时在 Mac OSX El Captitan 上使用 c++11 标志和通常的 qt 框架标志链接一些其他 dylib(犰狳、boost 库等)。该项目编译良好,但为了使其在其他几台机器上更具可移植性,我试图静态链接几个动态库。 我在(要静态链接的)库(例如-static -lboost_thread)之前添加了 -static 标志,如此处所述。

https://gcc.gnu.org/ml/gcc/2000-05/msg00517.html

但是,我收到以下错误。

ld: 找不到 -lcrt0.o collect2 的库:错误:ld 返回 1 个退出状态

我确认该错误仅在尝试静态链接而不是动态链接时出现。

【问题讨论】:

    标签: c++ macos qt linker gcc4.9


    【解决方案1】:

    您正在应用的GCC's -static option 是非位置的。它强制执行 所有库的静态链接。然后,您的链接将失败,因为您的系统没有 libcrt0.o 的静态版本

    您可能会将 GCC 的 static 选项与 ld's -static option 混淆(同义词:-Bstatic-dn -non_shared), 其中 位置的。它仅影响命令行上的后续库。它的倒数 链接器的-Bdynamic 选项(同义词:-dy-call_shared)。

    所以要仅静态链接库-lfoo-lbar...,您可以通过 GCC 将-Bstatic 传递给 链接器就在您提到它们之前,-Bdynamic 就在它们之后:

    -Wl,-Bstatic -lfoo -lbar -Wl,-Bdynamic
    

    不要省略最后的 -Wl,-Bdynamic,即使 -lbar 是你的库的最后一个,因为 GCC 会悄悄地附加标准​​库 到您的链接(如您所见)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-03
      • 1970-01-01
      相关资源
      最近更新 更多