静态链接与dylib ld:找不到-lcrt0.o的库2:collect2:错误:ld返回1退出状态

时间:2016-09-01 18:17:24

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

我正在使用gnu49编译编译qt5 c ++项目,同时在Mac OSX El Captitan上使用c ++ 11标志和通常的qt框架标志链接其他几个dylib(armadillo,boost libs等)。该项目编译得很好但是为了使其在其他几台机器上更加便携,我试图静态链接一些动态库。 我在这里描述的(静态链接的)库(例如JSON API)之前添加了-static标志。

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

但是,我收到以下错误。

  

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

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

1 个答案:

答案 0 :(得分: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悄悄附加标准库 你的联系(正如你所发现的那样)。