web-dev-qa-db-fra.com

Sortie g ++: fichier non reconnu: format de fichier non reconnu

J'essaie de créer un programme avec plusieurs fichiers pour la première fois. Je n'ai jamais eu de problème avec le programme de compilation avec main.cpp uniquement. Avec les commandes suivantes, voici le résultat:

$ g++ -c src/CNumber.cpp src/CNumber.h -o src/CNumber.o
$ g++ -c src/CExprPart.cpp src/CExprPart.h -o src/CExprPart.o
$ g++ -c src/CExpr.cpp src/CExpr.h -o src/CExpr.o
$ g++ -c src/main.cpp -o src/main.o
$ g++ src/CNumber.o src/CExprPart.o src/CExpr.o src/main.o -o execprogram
src/CNumber.o: file not recognized: File format not recognized
collect2: error: ld returned 1 exit status

Qu'est-ce qui pourrait provoquer une telle erreur et que dois-je en faire? Utilisation de Linux Mint avec gcc (Ubuntu/Linaro 4.7.2-2ubuntu1). Merci

23
RuinerCZ

C'est faux:

 g++ -c src/CNumber.cpp src/CNumber.h -o src/CNumber.o

Vous ne devez pas "compiler" les fichiers .h. Cela créera des fichiers d'en-tête précompilés, qui ne sont pas utilisés pour créer un exécutable. Ce qui précède devrait simplement être

 g++ -c src/CNumber.cpp -o src/CNumber.o

Similaire pour la compilation des autres fichiers .cpp

25
nos

Je suis tombé sur cette erreur lors de la construction de quelque chose - il s'est avéré être dû à l'échec d'une génération précédente lors de la compilation d'un fichier source dans un fichier .o - ce fichier .o était incomplet ou corrompu, donc quand j'ai essayé une autre génération, il a donné cette erreur sur ce fichier.

La solution consistait simplement à supprimer le fichier .o (ou à exécuter make clean, si vous avez un makefile avec cette cible).

(Cela n'a pas grand-chose à voir avec le problème de publication d'origine, mais c'était l'un des premiers résultats dans une recherche Google pour l'erreur, il suffit donc de l'ajouter ici).

26
Brian Burns