2014-12-03 2632 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()

相關問題