2009-02-15 4 views
17

je le code suivant:Erreur de compilation: Undefined symbols: "_main", fait référence à partir de: commencer dans 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; 
} 

après la compilation, il me donne l'erreur suivante:

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

Pourquoi se plaint-il de principal? Est-ce que je ne peux pas déclarer principal dans un autre fichier et inclure celui-ci?

Merci beaucoup!

Répondre

22

Vous avez essayé de lier déjà:

g++ file.cpp 

Cela compilera non seulement, mais essayer de créer déjà l'exécutable. L'éditeur de liens est alors incapable de trouver la fonction principale dont il a besoin. Eh bien, faites comme ceci:

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

Cela va créer deux fichiers file.o et hasmain.o, les deux ne se compilait jusqu'à présent. Maintenant, vous pouvez les lier avec g ++:

g++ -omy_program hasmain.o file.o 

Il automatiquement comprendre que ce sont des fichiers déjà compilés, et appelez l'éditeur de liens sur eux pour créer un fichier « mon_programme » qui est votre exécutable.

1

Si vous déclarez la fonction principale dans un autre fichier, vous devez compiler les deux fichiers séparément, puis les lier dans un exécutable.

Sauf si vous incluez tout le contenu du fichier à partir du fichier avec la fonction principale, cela fonctionnera aussi, bien qu'un peu bizarre. Mais, si vous faites cela, vous devez vous assurer que vous compilez le fichier qui a la fonction main().

Questions connexes