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
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.
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
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.
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
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
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
10134200cookie-checkKompilieren eines C++-Programms mit GCCyes
Mögliches Duplikat von Was ist der Unterschied zwischen g++ und gcc?
– Unterstrich_d
5. Dezember 2017 um 10:54 Uhr