Wie kompilieren Sie und verknüpfen Sie zusammen Objekt-Dateien in C++ unter Verwendung der gleichen header-Datei?
Ich habe dieses Problem, wo der GCC-compiler scheint zu scheitern, wenn es um die Verknüpfung von zwei Objekt-Dateien, die ich zusammen haben. Die beiden Objekt-Dateien foo1.cc
und foo2.cc
Klassen aus einer header-Datei namens foo1.hh
. Neben der header-Datei foo.hh
hat als externe Deklaration einer Objekt-Instanz wird in foo1.cc
.
Es sollte angemerkt werden, dass die header-Datei foo.hh
wird nur dann definiert werden, wenn zwischen den beiden source-Dateien foo1.cc
und foo2.cc
.
Wenn ich kompilieren der source Dateien mit dem folgenden Befehl, alles scheint zu funktionieren:
g++ foo1.cc foo2.cc
Der obige Befehl erzeugt eine ausführbare Datei namens a.out
.
Wenn ich versuche zu kompilieren die Quelldateien in Objektdateien unabhängig:
g++ -c foo1.cc
g++ -c foo2.cc
g++ -o foo1.o foo2.o
Den GCC-compiler beschwert sich, dass es Undefinierte Referenzen auf Funktionen in foo2.cc
. Diese Funktionen sollten definiert werden, in foo1.cc
; aber der linker nicht erkennen, dass.
Ich Frage mich, ob es war ein Weg, um dieses Problem mit dem GCC-compiler.
- Willkommen ALSO! Sicher sein, zu akzeptieren, der die meisten hilfreiche Antwort.
- Sie sollten akzeptieren, eine Antwort.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist kein Problem, du hast einen Fehler in deiner gcc-syntax.
den
-o
parameter name der Ausgabedatei, also in deinem Fall, würde es überschreiben foo1.o mit dem Ergebnis der Verknüpfung.Ihre Letzte Befehl ist die Verknüpfung Befehl ist zu sagen: erstellen Sie eine ausführbare Datei aus foo2.o und der name der ausführbaren Datei foo1.o. Der linker wahrscheinlich nicht finden, alle Informationen, die es braucht, um erstellen Sie die ausführbare Datei, da Sie Ihre Absicht war, sowohl foo1.o und foo2.o. Lassen Sie einfach die
-o
fahne insgesamt: