21 votes

Erreur de compilation: Symboles non définis: "_main", référés à partir de: start in crt1.10.5.o

J'ai le code suivant :

#include 

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 compilation, cela me donne l'erreur suivante :

Symboles non définis :
  "_main", référencés depuis :
      start in crt1.10.5.o
ld: symbole(s) introuvable(s)
collect2: ld a retourné 1 comme statut de sortie

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

Merci beaucoup !

28voto

Johannes Schaub - litb Points 256113

Vous avez déjà essayé de le lier :

g++ fichier.cpp

Cela ne compilera pas seulement le fichier, mais essaiera également de créer immédiatement l'exécutable. Le linker ne pourra alors pas trouver la fonction principale dont il a besoin. Faites donc comme ceci :

g++ -c fichier.cpp
g++ -c a_unemain.cpp

Cela créera deux fichiers fichier.o et a_unemain.o, tous deux uniquement compilés jusqu'à présent. Vous pouvez maintenant les lier ensemble avec g++ :

g++ -omon_programme a_unemain.o fichier.o

Il déterminera automatiquement qu'il s'agit de fichiers déjà compilés, et invoquera le linker dessus pour créer un fichier "mon_programme" qui est votre exécutable.

2voto

Himadri Choudhury Points 5300

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

À moins d'inclure l'intégralité du contenu du fichier à partir du fichier avec la fonction principale, cela fonctionnera également, bien que ce soit un peu étrange. Mais, si vous le faites, vous devez vous assurer de compiler le fichier qui contient la fonction main().

0voto

Sudarshan Sinha Points 29

Essayez ceci (ils ont fonctionné pour moi) :

  • /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
  • brew install mingw-w64

Veuillez sauvegarder votre code avant de lancer l'exécution.

Pour référence, consultez cette vidéo

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X