Question Erreur de compilation: Symboles non définis: "_main", référencé depuis: start in crt1.10.5.o


J'ai le code suivant:

#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, cela 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 main? Je ne peux pas déclarer main dans un autre fichier et inclure celui-ci?

Merci beaucoup!


17
2018-02-15 07:14


origine


Réponses:


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

g++ file.cpp

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

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

Cela créera deux fichiers file.o et hasmain.o, tous deux seulement compilés jusqu'ici. Maintenant, vous pouvez les lier avec g ++:

g++ -omy_program hasmain.o file.o

Il va automatiquement découvrir que ce sont des fichiers déjà compilés, et appeler l'éditeur de liens pour créer un fichier "my_program" qui est votre exécutable.


22
2018-02-15 07:20



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

Si vous n'incluez pas l'intégralité du contenu du fichier du fichier avec la fonction principale, cela fonctionnera également, bien que cela soit un peu étrange. Mais si vous faites cela, vous devez vous assurer que vous compilez le fichier qui a la fonction main ().


1
2018-02-15 07:18