Unterschied g++ <>gcc



  • hallo miteinander,
    ich habe vom Portal 'GNU-Software' das cpp-Compilerpaket geladen, in dem der g++ - compiler wie auch der gcc-compiler enthalten ist. wenn ich g++ --version bzw. gcc --version aufrufe erscheinen exakt identische Informationen zur Versionsanzeige. Wird --help gerufen verhält es sich ebenso.
    wird ein Programm mit 'g++ test.cpp' kompiliert so wird es zu einer a.exe.
    wird das selbe Programm mit 'gcc test.cpp' kompiliert steigt der compiler aus.
    gcc verlangt das Format 'gcc -c test.cpp' . es entsteht ein objektfile test.o

    offensichtlich sind beide compiler nicht identisch, haben aber beide dieselbe versionsnummer. so wie ich das verstanden habe ist mingw der Hersteller von g++, gcc wurde von leuten geschrieben die sich unter dem Pseudo 'GNU'
    zusammengefunden haben.
    wie die test.o zu einer test.exe weiterverarbeitet wird werde ich wohl selber noch rausfinden.

    mfg,
    edelweiss



  • Schnelle und kurze Antwort: g++ ist der C++-Compiler, gcc der C-Compiler. Es gibt vermutlich noch viele Unterschiede bzgl. Linkerverhalten etc. Aber da fehlt mir das Wissen.



  • C und C++ sind zwei unterschiedliche Sprachen. Der gcc möchte als C-Compiler gerne .c-Dateien kompilieren und NICHT .cpp-Dateien. Der Compiler versucht ggf. schon an der Dateiendung zu erkennen, ob es C oder C++ ist.



  • Das stimmt so aber nicht ganz.
    gcc -xc++ main.cpp -o main.exe -lstdc++ ist nicht falsch.
    gcc steht für gnu compiler collection und nicht (nur) gnu c compiler.
    Den letztendlich zu verwendenen compiler wird durch die file extension oder den -x command bestimmt und da sind c, c++ und andere sprachen dabei.
    (gcc -c bla.c main.cpp objc.m ist ein "valider" aufruf.)

    g++ kompiliert alles, was keine object file ist, als wär es c++, auch .c (C Dateien).

    • -c: Kompilieren und Assembly erzeugen, nicht linken
    • -S: Nur kompilieren
    • -o: Output in die angegeben Datei stopfen
    • -E: Nur Präprozessor bemühen

    Fehlt c, S oder E wird kompiliert, assembly erzeugt und gelinkt.



  • Der GCC ist eine Compilersuite, und das Kommandozeilenprogramm gcc ruft den jeweiligen sprachspezifische Compiler auf, wenn das über die Dateiendung erkannt wird. Man kann das auch per Kommandozeilenargument erzwingen. Der Unterschied zwischen gcc mit C++ Source und g++ mit C++ Source besteht darin, dass g++ gleich noch alle C++ Laufzeitbibliotheken dazu bindet und man das nicht von Hand machen muss.

    #include <iostream>
      
    int main () {
        std::cout << "Hello World!\n";
    }
    

    Das lässt sich bei mir (Ubuntu 20.04 LTS) problemlos mit gcc übersetzen und linken.

    gcc demo.cpp -o demo -L/usr/lib/x86_64-linux-gnu -lstdc++
    

Anmelden zum Antworten