PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Compiler für c++


18.02.00, 07:55
Hallo zusammen,

ich versuche mir gerade über das Werk von
Stoustroup C++ beizubringen. Leider habe ich
Probleme mit den Compilern. Wenn ich also
versuche ein Beispielprogramm aus dem Buch
zu kompalieren bekomme ich Fehlermeldungen.
Ich benutze gcc (habe mir schon überlegt ob
das vielleicht "nur" ein c Compiler ist),
habe aber auch schon cc probiert. Meine
Quellcodedateien speichere ich als .c, muß
ich da vielleicht auch ne andere Endung
verwenden? Gehen wir also mal davon aus,
daß die Endung und der gewählte Compiler
passen, dann findet der nie die Headerdatei-
en, obwohl ich die Pfade in der PATH-Vari-
ablen gesetzt habe. Wenn ich den Pfad aber
entweder im Quellcode explizit angebe, dann
bekomme ich eine Menge Meldungen und die
Compalierung schlägt fehl. Liegt das viel-
leicht auch an den verwendeten Headerdateien?
Warum gibt es z. B. eine iostream und eine
iostream.h?

Das waren eine Menge Fragen und ich hoffe
jemand kann mich "auf den richtigen Weg
bringen" oder mir zumindest sagen wo ich
eine deutschsprachige Dokumentation finde.

Jedenfalls schon mal Vielen Dank im Voraus.

Gruß

Stefan

------------------
****************************
Dipl.-Ing.(FH) Forstwirtschaft
Stefan Feeser

EMail feeser@feeser.ab.uunet.de
*************************

docdooley
18.02.00, 08:55
Hi,

also fangen wir mal mit dem einfachen an,
.c = C-File
entweder als .C oder .cpp abspeichern

oder gcc -x c++ name.c
oder g++ -x c++ name.c

Zu den Headerdateien, was sind denn das fuer welche und poste einfach mal die Anweisung mit der die Source kompiliert wird, wuerde jetzt schon helfen

Also man kann dem egcs auch per Kommandozeile den Pfad zu den Includes mitgeben,
z.b: g++ -x c++ name.c -I/pfad/include

18.02.00, 23:30
schon mal vielen Dank! Poste den Code
im Laufe des Wochenendes - bin nämlich
gerade im Stress:-)

Hagen von Tronje
19.02.00, 06:50
Hi,

Welche Distribution hast Du?

Nehmen wir mal an, Du hast SuSE 6.3.
Dann ist zu beachten, dass 'gcc' zwar auch
C++-Programme compilieren kann,

ABER

SuSE hat den C++-Anteil vom C-Compiler getrennt,
Du muss zuvor noch das Paket
gpp
aus der Serie 'd' (Programmentwicklung) installieren,
damit das mit dem C++ richtig flutscht.

ABER

Das reicht immer noch nicht, jetzt brauchst Du noch
das "libgpp" Paket.
Dort sind die ganzen headers drin fuer C++.
Die heades fuer C sind wieder woanders, naemlich im Paket "libc".

Solltest Du eine andere Distri als SuSE haben,
ist es dort aehnlich:
RedHat hat z. B. auch den "gcc" aufgespalten
in C und C++ (soweit ich mich noch erinnere).

***************************

die proggies _stets_ mit *.cpp benennen.
Gar NICHT mit *.c bzw.
gcc -x c++ *.c
anfangen!

Begruendung:
Hier ein C++ Code ( hello.cpp ) :

// Dies ist ein (sehr) kleines Beispiel :-)

#include <iostream>

int main()
{
std::cout << "Hallo Stefan\n" ;
}



"gcc" unterscheidet C von C++ durch die Dateiendung ( d. h. *.c von *.cpp (oder *.C oder *.cc oder *.cxx ))

ABER

tux@erde [~] > gcc hello.cpp
/tmp/ccatW9iu.o: In function `main':
/tmp/ccatW9iu.o(.text+0x9): undefined reference to `cout'
/tmp/ccatW9iu.o(.text+0xe): undefined reference to `ostream:: operator<<(char const *)'

tux@erde [~] > gcc -x c++ hello.cpp
/tmp/ccYEFCdw.o: In function `main':
/tmp/ccYEFCdw.o(.text+0x9): undefined reference to `cout'
/tmp/ccYEFCdw.o(.text+0xe): undefined reference to `ostream:: operator<<(char const *)'

Bei "gcc" wird nach C-Manier gelinkt,
und da ist nun mal die C++-Bibliothek nicht dabei.

FUNZEN wuerde

tux@erde [~] > gcc hello.cpp -lstdc++
tux@erde [~] >

BESSER

tux@erde [~] > g++ hello.cpp
tux@erde [~] > a.out
Hallo Stefan

Hagen

PS
> Warum gibt es z. B. eine iostream und eine iostream.h?
Nicht viel um, was ? http://www.linuxforen.de/ubb/wink.gif
Der (ANSI-)Standard will es jetzt ohne das '.h',
und das 'iostream.h' bleibt noch da, damit auch
"aeltere" proggies noch laufen http://www.linuxforen.de/ubb/smile.gif


[Diese Nachricht wurde von Hagen von Tronje am 19. Februar 2000 editiert.]

22.02.00, 16:12
Nochmals vielen Dank und Sorry das ich
es immer noch nicht geschafft habe den Source
zu posten. Aber ich habe in zwei Wochen
ein Finanzmatheseminar und vor meinem
Skiurlaub nächste Woche *grins* muss ich
diese Woche auch noch ein Problem mit dem
Informix Datenbankserver beheben *schwitz*.

Aber nun zur Sache, ich benutze SUSE 6.2.
Das mit dem gpp wollte ich schon nachin-
stallieren, aber da gab es dann eine Fehler-
meldung (unter yast) bezüglich der libs.
Nachdem ich die nun auch angewählt hatte
bekam ich wieder eine Fehlermeldung und
yast brach ab. Liegt aber wahrscheinlich
daran, daß ich von 6.2 auf 6.3 updaten wol-
lte. Gibts die Pakete irgendwo als .rpm
zum Downloaden, so daß ich nicht yast
benutzen muß??

Bis in zwei Wochen, wenn ich mir bei den
Skitouren nix breche;-))

Gruß

Stefan

------------------
****************************
Dipl.-Ing.(FH) Forstwirtschaft
Stefan Feeser

EMail feeser@feeser.ab.uunet.de
*************************

Hagen von Tronje
22.02.00, 22:19
Hi,

a) wenn yast sie installiert, dann nimmt es
auch rpm-Pakete. Also sind Deine rpm schon
auf Deinen CDs http://www.linuxforen.de/ubb/wink.gif

b) mensch kann auch von Hand installieren:
rpm -Uhv Paketchen.rpm

oder notfalls

rpm -Uhv --nodeps --force Paketchen.rpm

Hagen

16.03.00, 23:26
Hi,

da bin ich wieder! Urlaube sind ja sooo
schnell vorbei!!!

Bezüglich yast, daß die rpms von yast
installiert werden ist mir klar - uups,
na klar, dann liegen sie ja auch irgendwo
auf der CD und können von "Hand" installiert
werden. Da hab ich wohl auf dem Schlauch
gestanden!!! Übrigens benutze ich für die
rpms lieber xrpm - ist unter der Window-
oberfläche irgendwie komfortabler:-)) Mal
sehen ob ich das heute abend schaffe,
andernfalls klappt es hoffentlich am
Wochenende.

Stefan

------------------
****************************
Dipl.-Ing.(FH) Forstwirtschaft
Stefan Feeser

EMail feeser@feeser.ab.uunet.de
*************************