Kompilieren eines C++-Programms mit GCC

Lesezeit: 6 Minuten

Benutzer-Avatar
xyz

Wie kann ich ein C++-Programm mit dem GCC-Compiler kompilieren?

Datei info.c

#include<iostream>
using std::cout;
using std::endl;

int main()
{
   #ifdef __cplusplus
   cout << "C++ compiler in use and version is " << __cplusplus << endl;
   #endif
   cout <<"Version is " << __STDC_VERSION__ << endl;
   cout << "Hi" << __FILE__ << __LINE__ << endl;
}

Und wenn ich versuche zu kompilieren info.c:

gcc info.C

Undefined                       first referenced
 symbol                             in file
cout                                /var/tmp/ccPxLN2a.o
endl(ostream &)                     /var/tmp/ccPxLN2a.o
ostream::operator<<(ostream &(*)(ostream &))/var/tmp/ccPxLN2a.o
ostream::operator<<(int)            /var/tmp/ccPxLN2a.o
ostream::operator<<(long)           /var/tmp/ccPxLN2a.o
ostream::operator<<(char const *)   /var/tmp/ccPxLN2a.o
ld: fatal: Symbol referencing errors. No output written to a.out
collect2: ld returned 1 exit status

Ist der GCC-Compiler nicht in der Lage, C++-Programme zu kompilieren? In einer verwandten Anmerkung, was ist der Unterschied zwischen gcc und g++?

  • Mögliches Duplikat von Was ist der Unterschied zwischen g++ und gcc?

    – Unterstrich_d

    5. Dezember 2017 um 10:54 Uhr

Benutzer-Avatar
Evan Teran

gcc kann C++-Code eigentlich ganz gut kompilieren. Die Fehler, die Sie erhalten haben, sind Linker Fehler, keine Compilerfehler.

Die Chancen stehen gut, wenn Sie die Kompilierungszeile wie folgt ändern:

gcc info.C -lstdc++

Dadurch wird es mit der Standard-C++-Bibliothek verknüpft, dann funktioniert es einwandfrei.

Allerdings sollten Sie sich das Leben einfach leichter machen und nutzen g++.


Rup sagt es am besten in seinem Kommentar zu einer anderen Antwort:

[…] gcc wählt den richtigen Back-End-Compiler basierend auf der Dateierweiterung aus (dh kompiliert eine .c als C und eine .cc als C++) und verknüpft Binärdateien standardmäßig nur mit den standardmäßigen C- und GCC-Hilfsbibliotheken, unabhängig von der Eingabesprache; g++ wählt auch das richtige Backend basierend auf der Erweiterung aus, außer dass es meiner Meinung nach alle C-Quellen stattdessen als C++ kompiliert (dh es kompiliert sowohl .c als auch .cc als C++) und libstdc++ unabhängig von der Eingabesprache in seinen Linkschritt einbezieht.

Wenn Sie dem Code die Erweiterung .c geben, denkt der Compiler, dass es C-Code ist, nicht C++. Und der C++-Compiler-Treiber heißt g++, wenn Sie den gcc-Treiber verwenden, werden Sie Linker-Probleme haben, da die Standard-C++-Bibliotheken standardmäßig nicht gelinkt werden. Also du möchtest:

g++ myprog.cpp

Und ziehen Sie nicht einmal in Betracht, eine .C-Erweiterung in Großbuchstaben zu verwenden, es sei denn, Sie möchten Ihren Code niemals portieren und sind bereit, von denen, mit denen Sie arbeiten, gehasst zu werden.

  • @Neil: Soweit ich das beurteilen kann, berücksichtigt gcc a .C (Groß-) Erweiterung eine C++-Erweiterung. Folgendes funktioniert ganz gut: gcc test.C -lstdc++ -o test oder g++ test.C -o test.

    – Evan Teran

    8. Juli 2010 um 17:19 Uhr

  • @ Evan Ja, natürlich tut es das. Das bedeutet jedoch nicht, dass Sie es jemals verwenden sollten, da es schreckliche Portabilitätsprobleme verursachen wird, ebenso wie alle Dateinamen, bei denen zwischen Groß- und Kleinschreibung unterschieden wird. Die Erweiterung für C++-Dateien sollte immer .cpp sein. Das macht keine Probleme und funktioniert garantiert auf allen gängigen Betriebssystemen.

    anon

    8. Juli 2010 um 18:28 Uhr

Benutzer-Avatar
Alexandre C.

Du solltest benutzen g++ anstatt gcc.

  • Kannst du erklären warum?

    – noraj

    24. Februar 2020 um 22:47 Uhr

  • Bitte geben Sie auch den Grund an, die Antwort ist nicht vollständig. Ich weiß nicht, sieht die Standardantwort so aus?

    – Chaminda Bandara

    23. Juni 2021 um 12:40 Uhr

Benutzer-Avatar
Bläser

Standardmäßig, gcc wählt die Sprache basierend auf der Dateierweiterung aus, aber Sie können erzwingen gcc um ein anderes Sprach-Backend mit auszuwählen -x Möglichkeit also:

gcc -x c++

Weitere Optionen finden Sie im Detail gcc Manpage unter “Optionen, die die Art der Ausgabe steuern”. Siehe zB gcc(1) – Linux-Manpage (Suchen Sie auf der Seite nach dem Text -x language).

Diese Einrichtung ist sehr nützlich, wenn gcc kann die Sprache nicht anhand einer Dateierweiterung erraten, beispielsweise wenn Sie Code generieren und ihn füttern gcc über Standardeingabe.

Benutzer-Avatar
Praveen S

Der Unterschied zwischen gcc und g++ sind:

     gcc            |        g++
compiles C source   |   compiles C++ source

Benutzen g++ anstatt gcc um Ihren C++-Quellcode zu kompilieren.

  • Es ist etwas komplizierter als das, wie in den anderen Antworten hier. gcc wählt den richtigen Back-End-Compiler basierend auf der Dateierweiterung aus (dh kompiliert eine .c als C und eine .cc als C++) und verknüpft Binärdateien standardmäßig nur mit den standardmäßigen C- und GCC-Hilfsbibliotheken, unabhängig von der Eingabesprache; g++ wählt auch das richtige Backend basierend auf der Erweiterung aus, außer dass es meiner Meinung nach alle C-Quellen stattdessen als C++ kompiliert (dh es kompiliert sowohl .c als auch .cc als C++) und libstdc++ unabhängig von der Eingabesprache in seinen Linkschritt einbezieht.

    – Rup

    8. Juli 2010 um 17:11 Uhr

  • @Rup: richtig, das ist im Grunde das, was ich in meiner Antwort gesagt habe.

    – Evan Teran

    8. Juli 2010 um 17:13 Uhr

Benutzer-Avatar
Borealis

Wenn ich mich richtig erinnere, bestimmt gcc den Dateityp aus dem Suffix. Also, mach es foo.cc und es sollte funktionieren.

Und um deine andere Frage zu beantworten, das ist der Unterschied zwischen “gcc” und “g++”. gcc ist ein Frontend, das den richtigen Compiler auswählt.

  • Es ist etwas komplizierter als das, wie in den anderen Antworten hier. gcc wählt den richtigen Back-End-Compiler basierend auf der Dateierweiterung aus (dh kompiliert eine .c als C und eine .cc als C++) und verknüpft Binärdateien standardmäßig nur mit den standardmäßigen C- und GCC-Hilfsbibliotheken, unabhängig von der Eingabesprache; g++ wählt auch das richtige Backend basierend auf der Erweiterung aus, außer dass es meiner Meinung nach alle C-Quellen stattdessen als C++ kompiliert (dh es kompiliert sowohl .c als auch .cc als C++) und libstdc++ unabhängig von der Eingabesprache in seinen Linkschritt einbezieht.

    – Rup

    8. Juli 2010 um 17:11 Uhr

  • @Rup: richtig, das ist im Grunde das, was ich in meiner Antwort gesagt habe.

    – Evan Teran

    8. Juli 2010 um 17:13 Uhr

Benutzer-Avatar
Peter Mortensen

Es funktionierte gut für mich. Nur ein Zeilencode auf der Windows-Befehlszeile (CMD).

Bestätigen Sie zunächst, dass Sie installiert haben gcc (für C) oder g++ (für C++) Compiler.

Geben Sie in der Befehlszeile für gcc Folgendes ein:

gcc --version

Geben Sie in der Befehlszeile für g++ Folgendes ein:

g++ --version

Wenn es installiert ist, fahren Sie fort.

Kompilieren Sie nun Ihre .c- oder .cpp-Datei über die Befehlszeile.

Für C-Syntax:

gcc -o exe_filename yourfilename.c

Beispiel:

gcc -o myfile myfile.c

Hier exe_filename (meinedatei im Beispiel) ist der Name von Ihre .exe-Datei die Sie nach der Kompilierung produzieren möchten (Hinweis: Ich habe hier keine Erweiterung eingefügt). Und ihrdateiname.c (meinedatei.c im Beispiel) ist der Ihre Quelldatei die die Erweiterung .c hat.

Gehen Sie nun zu dem Ordner, der Ihre .c-Datei enthält. Hier finden Sie eine Datei mit der Erweiterung .exe. Öffnen Sie es einfach. Hurra…

Für C++-Syntax:

g++ -o exe_filename yourfilename.cpp

Danach ist der Prozess derselbe wie für die C-Syntax.

  • Die Frage war “Wie kompiliere ich ein C++-Programm mit dem gcc-Compiler?” nicht “Wie kompiliere ich ein C-Programm mit dem gcc-Compiler? oder Wie kompiliere ich ein C++-Programm mit dem g++-Compiler?”

    – DevX

    20. Juni 2019 um 10:12 Uhr

  • Schöner Fang! @DevX

    – Rajkumar Bansal

    21. Juni 2019 um 7:47 Uhr

1013420cookie-checkKompilieren eines C++-Programms mit GCC

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy