"collect2:error:ld返回1退出状态"是什么意思?

use*_*120 52 c compiler-errors

collect2: error: ld returned 1 exit status经常看到这个错误.例如,我正在执行以下代码片段:

void main() {
  char i;

  printf("ENTER i");
  scanf("%c",&i);

  clrscr();

  switch(i) {
    default:
      printf("\nHi..\n");
      break;
    case 1:
      printf("\n\na");
      break;
    case 2:
      printf("\nb\n");
      break;
    case 3:
      printf("\nc");
      break;
  }
}
Run Code Online (Sandbox Code Playgroud)

我得到了这个:

main.c:(.text+0x33): undefined reference to `clrscr'                       
collect2: error: ld returned 1 exit status 
Run Code Online (Sandbox Code Playgroud)

这是什么意思?

Woj*_*wka 68

"ld返回1退出状态"错误是先前错误的结果.在你的例子中有一个早期的错误 - "对'clrscr'的未定义引用" - 这是真实的错误.退出状态错误只表示构建过程中的链接步骤遇到了一些错误.通常退出状态0表示成功,退出状态> 0表示错误.

在构建程序时,可以将多个工具作为单独的步骤运行,以创建最终的可执行文件.在您的情况下,其中一个工具是ld,它首先报告它找到的错误(clrscr引用丢失),然后它返回退出状态.由于退出状态> 0,表示错误并报告.

在许多情况下,工具以退出状态返回它们遇到的错误数.因此,如果ld工具发现两个错误,其退出状态将为2.

  • 当`/ usr/tmp /`中没有足够的空间时,可能会导致同样的错误(`collect2:error:ld返回1退出状态`).因为链接器无法创建临时文件. (14认同)

faz*_*oso 12

在您的情况下,您可以参考缺失的符号.但在某些情况下,ld不会提供错误信息.

如果要扩展ld提供的信息,只需将以下参数添加到$(LDFLAGS)

-Wl,-V
Run Code Online (Sandbox Code Playgroud)

  • 在 OS XI 上必须使用 `-Wl,-t` 因为 `ld` 不能识别 `-V` 作为一个选项,但是 `-t` 会导致它列出它试图链接的所有库(这有助于解决我的问题并让你部分了解`-V`的作用) (2认同)

小智 7

clrscr不是标准 C 函数。据网上说,它曾经是老C++Builder中的一个东西。

是 clrscr(); C++ 中的函数?