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

时间:2014-12-03 13:06:23

标签: 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;
  }
}

我得到了这个:

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

这是什么意思?

5 个答案:

答案 0 :(得分:56)

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

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

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

答案 1 :(得分:10)

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

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

-Wl,-V

答案 2 :(得分:2)

clrscr不是标准的C函数。根据互联网,它曾经是老Borland C.的一个东西 Is clrscr(); a function in C++?

答案 3 :(得分:1)

尝试运行任务管理器以确定程序是否仍在运行。

如果它正在运行,则将其停止并再次运行。 [错误] ld返回1个退出状态将不会返回

答案 4 :(得分:0)

即使使用基本的 HELLO WORLD 程序,我也遇到此错误:

cout << "Hello World";

问题很容易解决:我忘记关闭之前运行的控制台窗口,只是将其最小化并忘记了。这就是为什么当我尝试运行我未来的程序时不断收到此错误的原因。 只需关闭它:)

希望它会有所帮助,尽管您可能还有其他问题。