我经常看到错误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
这是什么意思?
答案 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";
问题很容易解决:我忘记关闭之前运行的控制台窗口,只是将其最小化并忘记了。这就是为什么当我尝试运行我未来的程序时不断收到此错误的原因。 只需关闭它:)
希望它会有所帮助,尽管您可能还有其他问题。