it-swarm.com.de

g ++ Ausgabe: Datei nicht erkannt: Dateiformat nicht erkannt

Ich versuche zum ersten Mal, ein Programm mit mehreren Dateien zu erstellen. Ich hatte noch nie ein Problem damit, ein Programm nur mit main.cpp zu kompilieren. Mit folgenden Befehlen ist dies das Ergebnis:

$ 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

Was könnte einen solchen Fehler verursachen und was soll ich damit machen? Verwenden von Linux Mint mit gcc (Ubuntu/Linaro 4.7.2-2ubuntu1). Vielen Dank

23
RuinerCZ

Das ist falsch:

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

Sie sollten keine .h-Dateien "kompilieren". Dadurch werden vorkompilierte Header-Dateien erstellt, die nicht zum Erstellen einer ausführbaren Datei verwendet werden. Das obige sollte einfach sein

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

Ähnliches gilt für das Kompilieren der anderen CPP-Dateien

25
nos

Ich bin beim Erstellen auf diesen Fehler gestoßen - es stellte sich heraus, dass ein vorheriger Build fehlgeschlagen ist, als eine Quelldatei in eine .o-Datei kompiliert wurde. Diese .o-Datei war unvollständig oder beschädigt. Als ich also einen anderen Build ausprobierte, gab es diesen Fehler in dieser Datei.

Die Lösung war, einfach die .o-Datei zu löschen (oder make clean, wenn Sie ein Makefile mit diesem Ziel haben).

(Dies hat nicht viel mit dem ursprünglichen Post-Problem zu tun, aber dies war einer der ersten Treffer in einer Google-Suche nach dem Fehler, also fügen Sie ihn einfach hier hinzu.).

26
Brian Burns