2014-12-03 11180 views
10

我经常看到错误collect2: error: ld returned 1 exit status。例如,我在执行下面的代码片段:“collect2:error:ld返回1退出状态”是什么意思?

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

尝试包括'conio.h',如果你使用的是TurboC。如果你正在使用GCC,即使包含它也不起作用。另外,使用'main main()'而不是'void main()'并在末尾添加一个'return 0;'。只是打印'你好...'并退出任何输入 – 2014-12-03 13:07:58

回答

29

“ld返回1退出状态”错误是以前的错误的后果。在你的例子中有一个更早的错误 - “未定义的引用`clrscr'” - 这是真正的错误。退出状态错误只是表示构建过程中的链接步骤遇到了一些错误。通常退出状态0表示成功,退出状态> 0表示错误。在许多情况下,工具会返回它们所找到的错误数量作为退出状态。当您构建程序时,可能会运行许多单独的工具来创建最终的可执行文件。其中一个工具是“ld”,它首先报告找到的错误(clrscr引用丢失),然后它将退出状态返回给调用者。调用者看到“ld”返回了非零退出状态并报告它。

+1

嗨Sorowka,谢谢! “在许多情况下,工具返回作为退出状态他们发现的错误数”意味着如果有2个错误,它将返回ld返回2退出状态。 – user3682120 2014-12-03 13:17:21

+1

你是对的 – 2014-12-03 14:46:50

+1

当'/ usr/tmp /'没有足够的空间时,可能会导致非常相同的错误('collect2:error:ld returned 1 exit status')。因为链接器不会能够创建临时文件。 – 2017-02-07 13:10:21

-1

如果您使用的GCC,请尝试使用system库函数,在stdlib.h定义:

#include <stdlib.h> 
int system (const char *command); 

这就是你需要做什么:

void main() 
{ 
    char i; 
    printf("ENTER i"); 
    scanf("%c",&i); 
    system ("clear"); 

    // Your implementation begins here. 

} 
+1

感谢您的回应,但有点不相关。 – user3682120 2014-12-03 13:19:48

4

在你的情况你有对缺失符号的引用。但在某些情况下,ld不会提供错误信息。

如果你想扩展劳工处提供的信息,只需添加以下参数到$(LDFLAGS)

-Wl,-V 
+1

在OS X上不得不使用'-Wl,-t',因为'ld'不能识别'-V'作为选项,但是'-t'会导致它列出它正试图链接的所有库(这有助于修复我的问题,并让你分道扬what'-V') – 2015-11-02 21:21:45

-1

包括:#include<stdlib.h>

,并使用System("cls")代替clrscr()

相关问题