Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : gcc <> g++??



kamome
17-06-2003, 09:11
Hey Yo Hoh!

Kann man ein c++-Programm auch mit "gcc"-Befehl compilieren oder ist dafuer "g++" noetig?
Falls auch mit gcc moeglich - gibts dennoch Unterschiede?

danke
cu
kamome

tuxipuxi
17-06-2003, 13:49
hi,

GCC heisst gnu compiler collection, beinhaltet auch noch compiler fuer andere sprachen.

es gibt auch wie du weisst eine "gcc" executable die fuer C code zustaendig ist. c++ kann nur mit "g++" kompiliert werden.

warum das so ist weiss ich nicht genau, ich glaube das hat mit dem linker zu tun.

gruss,

tuxipuxi.

almoeli
17-06-2003, 14:00
Hi,

bei GNU steht folgendes:

g++ is a program that calls GCC with the default language set to C++, and automatically specifies linking against the C++ library.

Unter default language settings versteht man den Parameter '-x c++' und den Parameter '-lstdc++' zum Linken der C++ Lib.
Hat dein Sourcecode eine der Endungen .C, .cc, .cpp, .c++, .cp, oder .cxx dann geht gcc automatisch davon aus, dass es C++ Code ist setzt die oben genannten Optionen obwohl man gcc statt g++ ruft.
Schreibt man allerdings C++ in ein .c File, und ruft 'gcc -o test test.c' so bekommt man jede Menge Fehler. Schreibt man 'g++ -o test test.c' so wird der C++ Sourcecode richtig übersetzt. Alternativ kann man auch 'gcc -x c++ -lstdc++ -o test test.c' schreiben und es wird richtig übersetzt.
Hoffe etwas Klarheit geschaffen zu haben.

Gruß

almoeli

riemer
17-06-2003, 14:29
Hallo,

mit dem Linken hat es schon zu tun. g++ linkt automatisch für c++-Programme benötigte Libs dyn. dazu. gcc macht dies nicht implizit.

Folgender Artikel beschreibt, was zu tun ist, wenn man C++-Programme mit dem gcc übersetzen will.
http://www.pl-berichte.de/t_system/c++-libc.html


Viele Grüße, Tilo

kamome
18-06-2003, 08:27
Hey Yo Hoh!

Danke Euch fuer die Antworten!

Zwischen dem "obwohl man gcc statt g++ ruft" von almoeli und dem von riemer genannten Artikel sehe ich einen kleinen Widerspruch. Allerdings waere es moeglich, dass man frueher "g++" verwenden musste, waehrend das bei aktuellen Versionen des gcc nicht mehr noetig ist? - Hatte vorhin die Moeglichkeit, das ganze auf einer Solaris Workstation zu testen - schlauerweise habe ich mir die gcc-Version nicht angeguckt (>_<) Scheint mir aber insgesamt keine sehr aktuell gehaltene Installation zu sein, vermutlich also irgendwas 2.x.x-maessiges. Jedenfalls bekam ich mit "gcc" jede Menge Fehler, mit "g++" ging alles gut.

Nunja, zumindest kann es also einen Unterschied machen - nochmal danke

cu
kamome

almoeli
18-06-2003, 10:02
Hi,

ich merk schon, die Diskussion geht ins Detail. Meine Behauptung "obwohl man gcc statt g++ ruft" basiert darauf, dass du ein einziges Sourcefile direkt in ein Binary kompilieren läßt. Verwendest du den -c Parameter, um eine .o zu erzeugen, dann mußt du später beim linken mit dem gcc explizit das -lstdc++ mit angeben, weil der gcc ja nicht weiß, das dein .o File ursprünglich mal ein C++ File war.
Der Artikel auf ProLinux behandelt das Thema, ob man C++ Programme übersetzen kann und diese Programme später nur die libc verwenden. Dabei verliert man jedoch eine Menge der Eigenschaften von C++ (kein new, delete, keine Streams cout usw.)Das der gcc sowohl C als auch C++ Code übersetzen kann geht auch aus dem Artikel hervor.

Gruß

almoeli

anda_skoa
18-06-2003, 10:02
Original geschrieben von kamome
Zwischen dem "obwohl man gcc statt g++ ruft" von almoeli und dem von riemer genannten Artikel sehe ich einen kleinen Widerspruch.

Kein Widerspruch.
gcc "erkennt" anhand der Dateiendung eine C++ Datei und kann diese auch kompilieren, nur wird nicht gegen C++ Bibliotheken gelinkt.

Bei Schritten mit -c ist das also kein großer Unterschied, beim letzen Schritt (Linken) sehrwohl.

Ansich ist es üblich, für C++ Code den C++ Compiler zu verwenden, weil viele C Compiler keinen automatischen C++ Mode haben.
Für GCC wäre das g++

Ciao,
_