Überblick
Wer C++-Software auf Linux-Plattformen wie Ubuntu entwickelt, begegnet im Terminal regelmäßig dem Kommando c++. Doch welche Rolle spielt dieser Befehl im System, wie unterscheidet er sich von g++ und wie greifen die internen Mechanismen ineinander? Dieser Leitfaden erklärt die Hintergründe der Linux-Toolchain und demonstriert praxisnah das Erstellen, Optimieren und Ausführen eigener Programme.
C++-Build-Umgebung einrichten und Compiler-Version ermitteln
Damit das Betriebssystem C++-Code übersetzen kann, muss zunächst die grundlegende Entwicklungsumgebung bereitgestellt werden. Unter Ubuntu bündelt das Metapaket build-essential alle erforderlichen Komponenten wie Compiler, Linker und Standardbibliotheken. Die Einrichtung erfolgt über folgenden Befehl:

Um zu verifizieren, an welcher Stelle im Dateisystem der c++-Aufruf aufgelöst wird, lässt sich der absolute Pfad der Binärdatei über which c++ lokalisieren:

Welches Release und welche Patchstufe des Compilers aktiv im System hinterlegt sind, gibt das Flag --version detailliert aus:
⚙️ [Wichtige Compiler-Flags im Überblick]
-o <file> : Legt den Zieldateinamen für das fertig gelinkte Binary fest.-c : Führt nur den Übersetzungsschritt aus und erzeugt eine Objektdatei (.o), ohne den Linker aufzurufen.-Wall : Aktiviert alle empfohlenen Diagnose- und Warnmeldungen für sauberen Quellcode.-O2 : Wendet umfassende Code-Optimierungen an, um Laufzeit und Dateigröße auszubalancieren.-std=<standard> : Bestimmt die zugrunde liegende Sprachversion des C++-Standards (z. B. c++17, c++20).-g : Fügt Symbole für die Fehlersuche mit Debuggern wie GDB in die Binärdatei ein.

Die Symlink-Struktur von /usr/bin/c++ und die Beziehung zu g++
Hinter dem Namen /usr/bin/c++ verbirgt sich kein eigenständiger Compiler-Quellbaum, sondern eine Verknüpfung. Eine detaillierte Dateiauflistung mit ls -l /usr/bin/c++ legt die zugrunde liegende Symlink-Kette und die Zugriffsrechte offen:

Auf Debian- und Ubuntu-Systemen wird dieser Verweis über das Alternativen-System gesteuert. Mittels update-alternatives --display c++ 2>/dev/null || readlink -f /usr/bin/c++ lässt sich die Verknüpfungshierarchie bis zur tatsächlichen physischen Binärdatei zurückverfolgen:

Hierbei wird deutlich: Der Systemaufruf c++ dient als standardisierter Alias, der standardmäßig auf den installierten GNU-Compiler g++ verweist.
Basisprogramm erstellen, übersetzen und ausführen
Um den Arbeitsablauf in der Praxis zu testen, erstellen wir zunächst eine minimalistische Quelltextdatei hello.cpp, die eine Begrüßungsnachricht ausgibt:

Anschließend wird hello.cpp über den c++-Befehl kompiliert. Durch das Einbinden von Warnhinweisen und Optimierungsstufen entsteht die saubere Binärdatei hello. Wenn der Code frei von Unregelmäßigkeiten ist, schließt der Compiler den Vorgang ohne Konsolenausgabe ab:

Die frisch generierte Datei kann nun im aktuellen Arbeitsverzeichnis direkt gestartet werden. Auf dem Terminal erscheint die programmierte Ausgabe "Hello from Linux c++!":

Modernes C++: Kompilieren nach C++20-Standard (-std=c++20)
Aktuelle C++-Sprachmittel erfordern eine entsprechende Konfiguration des Compilers. Zur Demonstration legen wir die Datei modern.cpp an, welche neuere Features wie std::string_view und constexpr kombiniert:

Über das Flag -std=c++20 weisen wir den c++-Compiler an, die Sprachsyntax gemäß der C++20-Spezifikation zu interpretieren und das ausführbare Programm modern zu erzeugen:

Ein abschließender Funktionstest durch Ausführen von ./modern bestätigt die erfolgreiche Interpretation des Codes, indem die Zeile "Modern C++20 on Ubuntu" auf der Konsole ausgegeben wird:

Damit ist die Funktionsweise des Befehls c++ unter Linux sowie sein Zusammenspiel mit g++ verständlich aufgeschlüsselt. Mit den vorgestellten Schaltern verfügen Sie über ein solides Fundament, um eigene Softwareprojekte auf der Ubuntu-Konsole zielgerichtet und performant zu kompilieren.