HOWTO · C++
Ein C++-Programm mit GCC kompilieren
Dieser Artikel beschreibt eine Methode zum Kompilieren eines C++-Programms mit dem gcc-Compiler.
Auf dieser Seite
Um eine C++-Quelldatei mit GCC zu kompilieren und auszuführen, verwenden Sie den Compiler-Treiber g++: Führen Sie g++ -o hello hello.cpp und anschließend unter Linux oder macOS ./hello aus. GCC steht für GNU Compiler Collection; g++ wählt die Einstellungen für den C++-Build und bindet bei einem gewöhnlichen Programm auch die C++-Standardbibliothek ein. Im Folgenden erfahren Sie, wie Sie prüfen, ob ein Compiler verfügbar ist, ein erstes Programm schreiben, häufige Diagnosen einordnen und mehrere Quelldateien gemeinsam erstellen.
GCC und seine Bedeutung verstehen
GCC ist eine Compilersammlung mit Treibern für mehrere Sprachen. Für C++ ist g++ meist der einfachste Treiber. Beim Erstellen eines Programms wird der Quellcode übersetzt; anschließend werden der erzeugte Objektcode und die benötigten Bibliotheken zu einer ausführbaren Datei verknüpft. Ein einzelner Befehl kann beide Schritte erledigen. Bei größeren Projekten werden die Dateien möglicherweise einzeln kompiliert und danach verknüpft.
Der Treiber gcc kann C++-Quellcode kompilieren, bindet die C++-Standardbibliothek aber nicht automatisch so ein wie g++. Bei GNU/Linux-Toolchains lässt sich gcc mit -lstdc++ verwenden, um diese Bibliothek ausdrücklich anzufordern. Dabei können die Reihenfolge der Bibliotheken und plattformspezifische Details eine Rolle spielen. Verwenden Sie für gewöhnliche C++-Builds daher g++. Quelldateien tragen häufig die Endung .cpp oder .cc; auf Systemen, bei denen Groß- und Kleinschreibung unterschieden wird, behandelt GCC auch die Endung .C als C++.
GCC installieren
Prüfen Sie zunächst in einem Terminal, ob bereits ein C++-Compiler verfügbar ist: Führen Sie g++ --version aus. Wird der Compiler gefunden, gibt der Befehl seine installierte Version aus. Ist der Befehl nicht verfügbar, installieren Sie eine C++-Toolchain über den Paketmanager Ihres Betriebssystems oder den für Ihr System empfohlenen Anbieter. Paketnamen und Installationsschritte unterscheiden sich: Unter Ubuntu und einigen verwandten Distributionen enthält build-essential GCC und weitere Build-Werkzeuge. Installieren Sie unter Windows eine GCC-Toolchain wie MinGW-w64 und nehmen Sie deren bin-Verzeichnis in PATH auf, oder verwenden Sie eine andere unterstützte C++-Toolchain. Richten Sie sich nach den aktuellen Anweisungen für Ihre Distribution oder Toolchain, statt sich auf Versionsangaben aus einem älteren Beispiel zu verlassen.
Ihr erstes C++-Programm schreiben
Legen Sie in einem Arbeitsverzeichnis eine Datei namens hello.cpp an. Das Programm gibt eine Zeile auf der Standardausgabe aus:
Führen Sie dieses Beispiel aus:
#include <iostream>
int main() {
std::cout << "Hello, World!\n";
return 0;
}
Hello, World!
#include <iostream> stellt die Stream-Deklarationen bereit, die std::cout verwendet. Die Funktion main ist der Einstiegspunkt des Programms; \n beendet die ausgegebene Zeile. Die unveränderte Ausgabe des Beispiels lautet „Hello World!“; dieser Text bleibt innerhalb des Code- und Ausgabeblocks auf Englisch.
Das C++-Programm kompilieren
Wechseln Sie in das Verzeichnis mit hello.cpp und erstellen Sie mit g++ -o hello hello.cpp eine ausführbare Datei mit dem Namen hello. Die Option -o legt den Ausgabenamen fest. Ohne diese Option verwendet GCC auf vielen Unix-ähnlichen Systemen einen Standardnamen wie a.out. Das Ergebnis ist eine ausführbare Datei, keine Objektdatei. Unter Linux oder macOS starten Sie sie mit ./hello. In der Windows-Eingabeaufforderung lautet der entsprechende Aufruf üblicherweise hello.exe aus dem aktuellen Verzeichnis. Der genaue Aufruf hängt jedoch von der Shell und der Toolchain ab.
Als Alternative für GNU/Linux fordert gcc -o hello hello.cpp -lstdc++ die C++-Standardbibliothek ausdrücklich an. Das kann nützlich sein, wenn ein Build-System den Treiber gcc voraussetzt. Für ein gewöhnliches C++-Programm ist g++ jedoch vorzuziehen, da dieser Treiber das passende Verknüpfungsverhalten für C++ automatisch auswählt.
Kompilierungsfehler beheben
Lesen Sie eine Compilerdiagnose von links nach rechts: Zuerst nennt sie eine Quelldatei und eine Zeile, anschließend beschreibt sie das Problem. Verwendet ein Programm beispielsweise cout, ohne <iostream> einzubinden oder den Namen als std::cout zu qualifizieren, kann die Diagnose melden, dass cout nicht deklariert wurde. Binden Sie den fehlenden Header ein und verwenden Sie std::cout; kompilieren Sie das Programm dann erneut. Der genaue Wortlaut und die Zeilennummern hängen von der Compilerversion und dem Aufbau des Quellcodes ab.
Mit g++ -Wall -o hello hello.cpp können Sie GCC anweisen, häufige Warnungen einzuschalten. -Wall ist ein guter Ausgangspunkt, aktiviert aber nicht alle von GCC angebotenen Warnungen. Warnungen können auf verdächtigen Code hinweisen. Prüfen Sie sie und entscheiden Sie, ob Sie den Code oder die Build-Optionen anpassen sollten.
Mehrere Dateien verknüpfen
Ein Programm kann eine Funktion in einer Quelldatei definieren und sie aus einer anderen aufrufen. In main.cpp können Sie beispielsweise <iostream> einbinden, int add(int, int); deklarieren und int main() { std::cout << add(2, 3) << '\n'; } definieren. In functions.cpp definieren Sie int add(int a, int b) { return a + b; }. Durch die übereinstimmende Deklaration und Definition kann der Compiler den Aufruf prüfen und der Linker ihn mit der Implementierung verbinden.
Erstellen Sie beide Quelldateien mit einem Befehl: g++ -o my_program main.cpp functions.cpp. Dabei werden die Dateien kompiliert und zur ausführbaren Datei my_program verknüpft. Unter Linux oder macOS starten Sie das Programm mit ./my_program; es gibt 5 aus. Unter Windows führen Sie die erzeugte Datei my_program.exe mit dem für Ihre Shell passenden Aufruf aus.
Fazit
Verwenden Sie für einen gewöhnlichen C++-Build mit GCC g++ -o program source.cpp und starten Sie anschließend die dadurch erzeugte ausführbare Datei. Auch der Treiber gcc kann C++ kompilieren, doch bei GNU/Linux-Builds muss -lstdc++ möglicherweise ausdrücklich ergänzt werden. Im üblichen Fall erspart Ihnen g++ diese zusätzliche Bibliotheksoption.
Häufige Fragen
- Was ist GCC? GCC steht für GNU Compiler Collection und stellt Compiler-Treiber für C++, C und weitere Sprachen bereit.
- Wie prüfe ich, ob GCC installiert ist? Führen Sie
g++ --versionaus, um den C++-Treiber zu prüfen, odergcc --version, um den C-Treiber zu prüfen. - Warum sollte ich für C++
g++stattgccverwenden?g++wählt automatisch das Verknüpfungsverhalten für C++ und bindet die Standardbibliothek ein, die typische Programme benötigen. Bei einem GNU/Linux-Build mitgcckann es nötig sein,-lstdc++ausdrücklich anzugeben. - Kann ein einzelner Befehl mehrere C++-Dateien kompilieren? Ja. Listen Sie die Quelldateien im
g++-Befehl auf, zum Beispielg++ -o my_program main.cpp functions.cpp. - Was bewirkt
-o? Mit dieser Option legen Sie den Namen der Ausgabedatei fest. Bei einem vollständigen Build-Befehl wieg++ -o hello hello.cppist das eine ausführbare Datei.