2009-02-15 10 views
17

ho il seguente codice:errore di compilazione: i simboli non definiti: "_main", fa riferimento a: iniziare a crt1.10.5.o

#include <iostream> 

using namespace std; 

class testing{ 
    int test() const; 
    int test1(const testing& test2); 
}; 

int testing::test() const{ 
    return 1; 
} 

int testing::test1(const testing& test2){ 
    test2.test(); 
    return 1; 
} 

dopo la compilazione, mi dà il seguente errore:

Undefined symbols: 
    "_main", referenced from: 
     start in crt1.10.5.o 
ld: symbol(s) not found 
collect2: ld returned 1 exit status 

Perché si lamenta di main? Non posso dichiarare main in un altro file e includerlo?

Grazie mille!

risposta

22

Si è tentato di creare un collegamento già:

g++ file.cpp 

che non solo compilarlo, ma cercare di creare già l'eseguibile. Il linker non è quindi in grado di trovare la funzione principale di cui ha bisogno. Beh, fare in questo modo:

g++ -c file.cpp 
g++ -c hasmain.cpp 

che creerà due file file.o e hasmain.o, sia solo compilato finora. Ora si possono collegare insieme con g ++:

g++ -omy_program hasmain.o file.o 

Sarà capire automaticamente che quelli sono i file già compilati, e invocare il linker su di loro per creare un file "mio_programma" che è il vostro eseguibile.

1

Se si dichiara la funzione principale in un altro file, è necessario compilare separatamente i due file e quindi collegarli in 1 file eseguibile.

A meno che non si includa l'intero contenuto del file dal file con la funzione principale, funzionerà anche se un po 'strano. Ma, se lo fai, devi assicurarti di compilare il file che ha la funzione main().

Problemi correlati