c++ - 让我们分析一下 "collect2: ld returned 1 exit status"?

标签 c++ g++ makefile ld

我知道这表明存在链接器问题,主要是未解析的符号。我知道要解决该问题/摆脱该错误消息,必须提供更多信息。我知道在 SO 上解决这个问题有很多问题。

我的问题旨在帮助理解 make 和 ld,找出什么(和谁)试图用这条线表达什么。

collect2: ld returned 1 exit status
  • “collect2:”是什么意思?它是一个步骤 make 调用吗?我在我的系统上找不到具有该名称的可执行文件。
  • 这是否意味着我正在使用 ld ?我配置了我的项目/Makefile,以便 g++ 应该进行链接,那么为什么仍然涉及 LD
  • 谁在写这条消息?制作 ? ld? g++ ?
  • 是否有一个有意义的可能退出代码列表?

最佳答案

首先,您需要知道名为 gccg++ 的命令行程序只是实际预处理器/解析器编译器/周围的伞(包装器)汇编器/链接器命令。他们的真名分别是cppcc1cc1plusasld . GCC 有助于统一它们的使用、命令行界面并为它们提供一组有意义的默认(和必需)选项。例如,直接使用 ld 链接二进制文件是非常困难的 - 如果 ld 没有使用所有 20+ (IIRC) 正确选项运行,它只是无法工作。

现在你知道了,你可以看到:

Does it mean I am using ld ? I configured my project / Makefile so that g++ should do the linking, so why is LD still involved

这意味着您调用了 GCC,但反过来它又调用了 LD。 GCC 本身一无所知——既不编译也不链接,因为它只是一个包装器。 (在 /usr/bin/gcc 上执行 wc -c 并惊讶于它只有几千字节!现在对 /usr/libexec 执行相同的操作/gcc/cc1plus 并找出可怕的真相:它有几个 10 兆大!)

What does "collect2:" mean? Is it a step make invokes ? I can't find an executable with that name on my system.

Collect2 也是 gcc 和 ld 之间的另一个间接级别。 More about it on its official website.

Who is writing that message ? make ? ld ? g++ ?

可能是 g++(据我所知就是这样)或 collect2 本身。

Is there a meaningful list of possible exit codes ?

含义是常规的 -​​ 零表示成功,非零表示失败。如果存在详尽的列表,则应该可以通过调用 man ld 来查看它。

关于c++ - 让我们分析一下 "collect2: ld returned 1 exit status"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12584243/

相关文章:

c++ - 带有类的库如何工作?

c++ - 更改 .exe 文件版本(来自 C++ 项目)

c++ - gcc 在这个概念定义中错误地评估了 std::declval 吗?

c++ - Eclipse CDT 自动包含共享库

c - 我无法理解所有 : ex1 in Makefile?(艰难地学习 C)

c++ - 通过像素格式转换将 AVFrame 转换为 QImage

C++ 链接问题

build - 如何从 cmake 中的列表中删除标记?

c++ - 如何在Visual Studio 2017中编译7zip源代码?

c++ - 与 [[maybe_unused]] 的结构化绑定(bind)