2013-04-26 26 views
5

Mi sono imbattuto nello this mentre cercavo di ottenere una risposta. Ma sembra che il poster abbia più file e che non siano stati collegati, e quindi l'errore.`riferimento non definito a` main` nella classe Cpp senza main()

Ma, perché ottengo questo errore quando si utilizza un singolo file?

g++ myClass.cpp 
/usr/lib/gcc/i686-redhat-linux/4.6.3/../../../crt1.o: In function `_start': 
(.text+0x18): undefined reference to `main' 
collect2: ld returned 1 exit status 

E perché è necessario main qui al momento della compilazione (da dove ci si trova una menzione della principale nel mio codice)? main è il punto di partenza per l'esecuzione del codice, ma perché il compilatore assume che ho bisogno di un main qui. Posso averlo definito in qualche altro file e usare gcc -o per fare un eseguibile?

O forse mi manca qualcos'altro nel codice che causa l'errore?

#include<iostream> 
class myClass 
{ 

public: 
myClass() 
{ 
    std::cout<<"Constructor"; 
} 

~myClass() 
{ 
    std::cout<<"Destructor";  
} 

}; 

risposta

5

main non è necessario compilare un file di origine. È necessario collegare un programma a un eseguibile [1], perché il programma deve iniziare da qualche parte.

È necessario dire al compilatore che "questo non è tutta del mio programma, basta compilare, ma non collegamento", usando l'opzione '-c', in modo da

g++ -c myClass.cpp 

che produrrà un file myClass.o che è possibile utilizzare successivamente, ad es

g++ -o myprog myClass.o myOtherClass.o something_that_has_main.o -lsomelib 

(Ovviamente, i nomi sostitutivi con tutto ciò che avete nel vostro progetto)

[1] Supponendo di utilizzare le scrips linker regolari che vengono con il compilatore. Ci sono "modi per aggirare anche questo", ma penso che sia al di là di questa risposta.

7

Si sta tentando di compilare un eseguibile, quindi si prevede una funzione main. Si dovrebbe compilare un file oggetto utilizzando il flag -c:

g++ -c myClass.cpp 

Mentre si è in esso, vi suggerisco di aggiungere segnali di avvertimento -Wall -Wextra per lo meno.

1

Si sta creando la sorgente come applicazione. Aggiungi l'opzione -c per produrre solo il file oggetto:

g++ -c myClass.cpp 
1

Compilare solo ?! utilizzare l'opzione -c

g++ -c file.cpp 

altrimenti il ​​progetto ha bisogno di un main.

1

È necessario utilizzare il flag -c per compilare e indicare al compilatore solo di generare un file oggetto. Stai dicendo al compilatore di fare un eseguibile.

Problemi correlati