Static linking with dylib ld: library not found for -lcrt0.o collect2: error: ld returned 1 exit status

Static linking with dylib ld: library not found for -lcrt0.o collect2: error: ld returned 1 exit status

我正在用 gnu49 compile 编译一个 qt5 c++ 项目,同时 link 在 Mac OSX El Captitan 上用 c ++11 标志和常用的 qt 框架标志。该项目编译得很好,但为了使其在其他几台机器上更具可移植性,我正在尝试静态 link 几个动态库。 我在(静态 linked)库(例如 -static -lboost_thread)之前添加了 -static 标志,如此处所述。

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

但是,我收到以下错误。

ld: library not found for -lcrt0.o collect2: error: ld returned 1 exit status

我确认错误仅在尝试静态 link 而不是动态 linking 时出现。

您正在应用的

GCC's -static option 是非位置的。它强制执行 所有库的静态 link年龄。你的 linkage 会失败,因为你的系统没有 libcrt0.o

的静态版本

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

所以 link 只有库 -lfoo-lbar...静态地,通过 GCC,您可以将 -Bstatic 传递给 link呃,就在你提到它们之前,-Bdynamic就在它们之后:

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

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