2014-12-03 6 views
10

Vedo molto spesso l'errore collect2: error: ld returned 1 exit status. Ad esempio, stavo eseguendo il seguente frammento di codice:Cosa significa "collect2: error: ld restituito 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; 
    } 
} 

e ho ottenuto questo:

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

Che cosa significa?

+0

Try incluso 'conio.h' se si utilizza TurboC. Se stai usando GCC, questo non funzionerà anche se lo includi. Usa anche 'int main()' invece di 'void main()' e aggiungi un 'return 0;' alla fine.Inoltre il programma stampa semplicemente 'Ciao ... 'ed esci da qualsiasi input –

risposta

29

Il "ld returned 1 exit status" di errore è la conseguenza di errori precedenti. Nel tuo esempio c'è un errore precedente - "riferimento non definito a` clrscr '"- e questo è quello reale. L'errore di stato di uscita segnala solo che il passaggio di collegamento nel processo di compilazione ha riscontrato alcuni errori. Normalmente lo stato di uscita 0 significa successo e lo stato di uscita> 0 indica errori. In molti casi gli strumenti restituiscono come stato di uscita il numero di errori trovati. Quando si crea il programma, è possibile eseguire molti strumenti separati per creare l'eseguibile finale. Uno di questi strumenti è "ld", che segnala per primo l'errore rilevato (manca il riferimento a clrscr), quindi restituisce lo stato di uscita al relativo chiamante. Il chiamante vede che "ld" ha restituito lo stato di uscita diverso da zero e lo segnala.

+1

Ciao Sorowka, grazie !! "In molti casi gli strumenti restituiscono come stato di uscita il numero di errori trovati" significa che se ci sono 2 errori verrà restituito ld restituito 2 stato di uscita. – user3682120

+1

Sei corretto –

+1

Lo stesso errore ('collect2: errore: ld restituito 1 stato di uscita') può essere causato quando non c'è abbastanza spazio a/usr/tmp /'. Perché linker non sarà in grado di creare file temporanei. –

-1

Se si sta utilizzando il gcc, provare a utilizzare la funzione system biblioteca, definito in stdlib.h:

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

Questo è ciò che devi fare:

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

    // Your implementation begins here. 

} 
+1

Grazie per la tua risposta, Ma era un po 'irrilevante. – user3682120

4

Nella tua situazione che hai un riferimento ai simboli mancanti. Ma in alcune situazioni, ld non fornirà informazioni sugli errori.

Se si desidera espandere le informazioni fornite da ld, basta aggiungere i seguenti parametri al tuo $ (LDFLAGS)

-Wl,-V 
+1

Su OS XI ho dovuto usare '-Wl, -t' come' ld' non riconosce '-V' come opzione, ma' -t' fa in modo che elenchi tutte le librerie che sta tentando di collegare (che ha aiutato a sistemare il mio problema e ti porta in parte a ciò che '-V' fa) –

-1

Include: #include<stdlib.h>

e utilizzare System("cls") invece di clrscr()