Was ist der Unterschied zwischen g++ und gcc?

Lesezeit: 9 Minuten

Was ist der Unterschied zwischen g und gcc
Brian R. Bondy

Was ist der Unterschied zwischen g++ und gcc? Welche davon sollte für die allgemeine C++-Entwicklung verwendet werden?

gcc und g++ sind Compiler-Treiber des GNU Compilers Sammlung (was einst nur GNU war C-Compiler).

Obwohl sie automatisch bestimmen, welche Backends (cc1 cc1plus …) je nach Dateityp aufzurufen, sofern nicht mit überschrieben -x languagesie haben einige Unterschiede.

Der wahrscheinlich wichtigste Unterschied in ihren Standardeinstellungen besteht darin, mit welchen Bibliotheken sie automatisch verknüpfen.

Laut der Online-Dokumentation von GCC Link-Optionen und wie g++ aufgerufen wird, g++ ist äquivalent zu gcc -xc++ -lstdc++ -shared-libgcc (Die erste ist eine Compiler-Option, die beiden zweiten sind Linker-Optionen). Dies kann überprüft werden, indem beide mit ausgeführt werden -v Option (sie zeigt die ausgeführten Backend-Toolchain-Befehle an).

  • Aus dieser Antwort schließe ich, dass der Befehl g ++ effektiv nur gcc mit einer Reihe von Flags ist. Warum gibt es dann zwei verschiedene Binärdateien (von ungefähr derselben Größe) für gcc und g ++ in Linux? Sollten wir nicht nur eine Binärdatei und einen Symlink (oder so ähnlich) haben?

    – UchihaItachi-Inaktives-Konto

    17. Juli 2019 um 14:32 Uhr

  • @Uchihaltachi Diese Dateien sind feste Links und werden beim Hochfahren überprüft argv[0] um zu sehen, welcher Aufruf verwendet werden soll. Dies ist bei den wichtigsten UNIX-Dienstprogrammen ziemlich üblich.

    Benutzer836218

    12. November 2019 um 18:55 Uhr

  • Wo steht das g++ is equivalent to gcc -xc++ -lstdc++ -shared-libgcc in den Unterlagen? Es sagt nur, dass es .c, .h und .i als C++ behandelt und libstdc++ automatisch verlinkt. Wenn der gepostete Befehl der Fall wäre, würde eine .txt-Datei mit gültigem C++-Code kompiliert, aber stattdessen einen nicht unterstützten Dateiformatfehler zurückgeben.

    – SD

    14. September 2020 um 3:37 Uhr

  • @neoedmund Hier. (Gern geschehen! Du musst mir nicht danken)

    – jemand

    21. November 2021 um 4:14 Uhr

  • Hier falls noch Zweifel bestehen.

    – jemand

    21. November 2021 um 4:15 Uhr

Was ist der Unterschied zwischen g und gcc
Martin York

GCC: GNU-Compiler-Sammlung

  • Verweise auf alle verschiedenen Sprachen, die vom GNU-Compiler unterstützt werden.

gcc: GNU-C-Compiler
g++: GNU-C++-Compiler

Die Hauptunterschiede:

  1. gcc wird kompilieren: *.c\*.cpp Dateien als C bzw. C++.
  2. g++ wird kompilieren: *.c\*.cpp Dateien, aber sie werden alle als C++-Dateien behandelt.
  3. Auch wenn Sie verwenden g++ Um die Objektdateien zu verknüpfen, verknüpft es automatisch in den std C++-Bibliotheken (gcc tut dies nicht).
  4. gcc Das Kompilieren von C-Dateien hat weniger vordefinierte Makros.
  5. gcc kompilieren *.cpp und g++ kompilieren *.c\*.cpp Dateien hat ein paar zusätzliche Makros.

Zusätzliche Makros beim Kompilieren *.cpp Dateien:

#define __GXX_WEAK__ 1
#define __cplusplus 1
#define __DEPRECATED 1
#define __GNUG__ 4
#define __EXCEPTIONS 1
#define __private_extern__ extern

  • Sie können die std C++-Bibliothek einbinden gcc durch Passieren -lstdc++ Parameter.

    – Denilson Sá Maia

    23. August 2010 um 0:13 Uhr

  • Es gibt also mehr Unterschiede zwischen ‘gcc’ und ‘g++’ als nur die Standardbibliotheken gcc -lstdc++ erhalten Sie immer noch nicht das gleiche Verhalten wie g++. Wir haben all dieses sprachspezifische Verhalten aus einem bestimmten Grund in einen eigenen Treiber gepackt, dafür ist er da. 🙂

    – Ti Strga

    28. Januar 2013 um 21:03 Uhr

  • In meinem Kommentar geht es nicht nur um das Verlinken … das ist der Punkt. Beschränken Sie die Diskussion auch nur auf das Verlinken (was Ihre Antwort nicht war) eines Benutzers still nicht die gesamte C++-Standardbibliothek verwenden können, indem Sie nur angeben -lstdc++, da Abhängigkeiten von mathematischen, RTTI- und Ausnahmeinformationen fehlen. Ob ein bestimmter Testfall verknüpft wird oder fehlschlägt, hängt vom Betriebssystem ab und welche C++-Features vom Testfall verwendet werden, weshalb all dieses Wissen wieder in den g++-Treiber integriert ist, anstatt es dem Benutzer zu überlassen, es herauszufinden .

    – Ti Strga

    29. Januar 2013 um 15:38 Uhr

  • Vertrauen Sie mir, wir haben diese Diskussion oft, normalerweise wenn ein Linux-Benutzer versucht, sein unvollständiges Makefile auf eine andere Plattform zu verschieben. 🙂 Die G++-Linkstufe macht viel mehr als gcc -lstdc++ auf anderen Betriebssystemen, insbesondere wenn das Ziel eine eingebettete Plattform ist. Glücklicherweise versenden wir deshalb überhaupt ein g++.

    – Ti Strga

    29. Januar 2013 um 15:40 Uhr

  • Die Spezifikationszeichenfolgen sind so konstruiert, dass sie für den Compiler spezifisch sind, die wiederum spezifisch für das Betriebssystem und das Ziel sind. Also wenn du rennst -dumpspec Auf (zum Beispiel) einem Cross-Compiler, der auf ein eingebettetes System abzielt, werden Sie die Unterschiede sehen. Es gibt mehr als nur Linker-Unterschiede … worum es auch bei Ihrer Antwort ging (Präprozessor-Makros, Include-Pfade, mehrere Laufzeitbibliotheken). Wir scheinen aneinander vorbei zu reden, aber als ehemaliger GCC-Betreuer versichere ich Ihnen, dass ich damit vertraut bin, was die Frontends sind und was nicht.

    – Ti Strga

    29. Januar 2013 um 17:02 Uhr


Für c++ sollten Sie g++ verwenden.

Es ist derselbe Compiler (zB die GNU-Compiler-Sammlung). GCC oder G++ wählen einfach ein anderes Frontend mit anderen Standardoptionen.

Kurz gesagt: Wenn Sie g++ verwenden, teilt das Frontend dem Linker mit, dass Sie möglicherweise mit den C++-Standardbibliotheken verknüpfen möchten. Das gcc-Frontend wird das nicht tun (es könnte auch mit ihnen verknüpfen, wenn Sie die richtigen Befehlszeilenoptionen übergeben).

  • +1 Auch meine GNU/Linux gcc-Manpage sagt: “Wenn Sie C++-Programme kompilieren, sollten Sie stattdessen GCC als g++ aufrufen.”

    – Elliptische Ansicht

    23. Oktober 2018 um 0:54 Uhr

1647210612 461 Was ist der Unterschied zwischen g und gcc
l – marc l

Was ist der Unterschied zwischen g++ und gcc?

gcc hat sich von einem einsprachigen “GNU C Compiler” zu einer mehrsprachigen “GNU Compiler Collection” entwickelt. Der Begriff gcc kann sich im Zusammenhang mit der C-Programmierung manchmal immer noch auf den “GNU C Compiler” beziehen.

man gcc

# GCC(1)                     GNU
# 
# NAME
#        gcc - GNU project C and C++ compiler

Aber, g++ ist der C++ Compiler für die GNU Compiler Collection. Wie gnat ist der Ada-Compiler für gcc. siehe Verwendung der GNU Compiler Collection (GCC)

Zum Beispiel Ubuntu 16.04 und 18.04 man g++ Befehl gibt die zurück GCC(1) Handbuchseite.

Ubuntu 16.04 und 18.04 man gcc besagt, dass …

g++ akzeptiert meist die gleichen Optionen wie gcc

und dass die Vorgabe …

… Gebrauch von gcc fügt die C++-Bibliothek nicht hinzu. g++ ist ein Programm, das GCC aufruft und automatisch die Verknüpfung mit der C++-Bibliothek angibt. Es behandelt .c-, .h- und .i-Dateien als C++-Quelldateien anstelle von C-Quelldateien, es sei denn, -x wird verwendet. Dieses Programm ist auch nützlich, wenn Sie eine C-Header-Datei mit der Erweiterung .h zur Verwendung in C++-Kompilierungen vorkompilieren.

Suche das gcc man-Seiten für weitere Details zu den Optionsvarianzen zwischen gcc und g++.

Welches sollte für die allgemeine C++-Entwicklung verwendet werden?

Technisch auch nicht gcc oder g++ kann für die allgemeine C++-Entwicklung mit entsprechenden Optionseinstellungen verwendet werden. Allerdings ist die g++ Das Standardverhalten ist natürlich auf eine C++-Entwicklung ausgerichtet.

Die Ubuntu 18.04 „gcc“-Manpage hinzugefügt, und Ubuntu 20.04 weiterhin folgenden Absatz:

Der übliche Weg, GCC auszuführen, besteht darin, die aufgerufene ausführbare Datei auszuführen gccoder machine-gcc beim Cross-Kompilieren, bzw machine-gcc-version um eine bestimmte Version von GCC auszuführen. Wenn Sie C++-Programme kompilieren, sollten Sie GCC als aufrufen g++ stattdessen.


Nebenbemerkung: Im Fall der eingebetteten Xcode.app-Toolchain g++ einfach verlinkt gcc. Daher, g++ Aufrufe können je nach Toolchain variieren.

ls -l /Applications/Xcode.app/Contents/Developer/usr/bin
# …
# lrwxr-xr-x  1 root  wheel         3 Apr 27  2021 g++ -> gcc
# -rwxr-xr-x  1 root  wheel    167120 Nov 23 20:51 gcc

### -- versus --
which -a g++
# /usr/bin/g++
ls -l /usr/bin/g++
# -rwxr-xr-x  1 root  wheel  137616 Jan  1  2020 /usr/bin/g++

1647210613 255 Was ist der Unterschied zwischen g und gcc
njsf

Ein bemerkenswerter Unterschied besteht darin, dass, wenn Sie a bestehen .c Datei in gcc wird es als C kompiliert.

Das Standardverhalten von g++ ist zu behandeln .c Dateien als C++ (es sei denn -x c angegeben).

  • (Spät, aber für die Nachwelt) Wie andere Antworten betont haben, ist dies keineswegs “der einzige bemerkenswerte Unterschied”, es sei denn, der Leser hat eine verzerrte Definition von Bemerkenswertheit.

    – Unterstrich_d

    13. September 2015 um 21:54 Uhr

Was ist der Unterschied zwischen g und gcc
zaphod

Obwohl die Befehle gcc und g++ sehr ähnliche Dinge tun, ist g++ als Befehl konzipiert, den Sie aufrufen würden, um ein C++-Programm zu kompilieren; es soll automatisch das Richtige tun.

Hinter den Kulissen sind sie wirklich das gleiche Programm. Soweit ich weiß, entscheiden beide anhand der Dateinamenerweiterung, ob ein Programm als C oder als C++ kompiliert wird. Beide sind in der Lage, mit der C++-Standardbibliothek zu verknüpfen, aber nur g++ tut dies standardmäßig. Wenn Sie also ein in C++ geschriebenes Programm haben, das nicht gegen die Standardbibliothek gelinkt werden muss, wird gcc zufällig das Richtige tun; aber g++ würde es auch tun. Es gibt also wirklich keinen Grund, g++ nicht für die allgemeine C++-Entwicklung zu verwenden.

  • (Spät, aber für die Nachwelt) Wie andere Antworten betont haben, ist dies keineswegs “der einzige bemerkenswerte Unterschied”, es sei denn, der Leser hat eine verzerrte Definition von Bemerkenswertheit.

    – Unterstrich_d

    13. September 2015 um 21:54 Uhr

1647210613 865 Was ist der Unterschied zwischen g und gcc
oho

Ich begann mich für das Thema zu interessieren und führte einige Experimente durch

  1. Ich habe diese Beschreibung gefunden Hieraber es ist sehr kurz.

  2. Dann habe ich versucht, mit gcc.exe und g++.exe auf meinem Windows-Rechner zu experimentieren:

    $ g++ --version | head -n1 
    g++.exe (gcc-4.6.3 release with patches [build 20121012 by perlmingw.sf.net]) 4.6.3
    
    $ gcc --version | head -n1
    gcc.exe (gcc-4.6.3 release with patches [build 20121012 by perlmingw.sf.net]) 4.6.3
    
  3. Ich habe versucht, einfache Testdateien für c89, c99 und c++ 1998 zu kompilieren, und es funktioniert gut für mich mit den richtigen Erweiterungen, die für die Sprache geeignet sind

    gcc -std=c99 test_c99.c
    gcc -std=c89 test_c89.c 
    g++ -std=c++98 test_cpp.cpp
    gcc -std=c++98 test_cpp.cpp
    
  4. Aber wenn ich versuche, das Tool “Gnu Compiler Collection” auf diese Weise auszuführen:

    $ gcc -std=c++98 test_cpp.c
    cc1.exe: warning: command line option '-std=c++98' is valid for C++/ObjC++ but not for C [enabled by default]
    
  5. Aber dieser funktioniert immer noch ohne Fehler

    $ gcc -x c++ -std=c++98 test_cpp.c
    
  6. Und dies auch

    $ g++ -std=c++0x test_cpp_11.cpp 
    

ps Testdateien

$ cat test_c89.c test_c99.c test_cpp.cpp

// C89 compatible file
int main()
{
    int x[] = {0, 2};
    return sizeof(x);
}

// C99 compatible file
int main()
{
    int x[] = {[1]=2};
    return sizeof(x);
}

// C++1998,2003 compatible file
class X{};
int main()
{
    X x;
    return sizeof(x);
}

// C++11
#include <vector>
enum class Color : int{red,green,blue}; // scoped enum
int main()
{
    std::vector<int> a {1,2,3}; // bracket initialization
    return 0;
}

Ergebnisse:

  1. Wenn Sie sich den Prozessbaum ansehen, dann scheint es, dass gcc und g ++ Backend für andere Tools sind, die in meiner Umgebung sind: cc1plus.exe, cc1.exe, collect2.exe, as.exe, ld.exe

  2. gcc funktioniert gut als Metatool, wenn Sie die richtige Erweiterung haben oder die richtigen -std -x-Flags setzen. Sehen Das

999210cookie-checkWas ist der Unterschied zwischen g++ und gcc?

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

Privacy policy