# Kleines Hello-World C++ Programm kompiliert nicht (Windows, Cygwin, GCC)



## DarthShader (25. Juli 2008)

Hallo,

ich würde gerne ein kleines Hello-World-Programm in C++ per GCC kompilieren, und zwar unter Windows via Cygwin.

Ich habe Cygwin installiert, es liegt in "d:\programme\cygwin" und dann habe ich "d:\programme\cygwin\bin" der PATH variable hinzugefügt. Mein Programm sieht so aus:


```
#include <iostream>

int main()
{
	std::cout << "Hello World" << std::endl;
}
```

Ich versuche, es so zu kompilieren:


```
gcc test.cpp
```

Dann kommt jedoch leider folgender Fehler:


```
cchoIFCt.o:test.cpp:(.text+0xd): undefined reference to `std::basic_string<char, std::char_traits<char>, std::allocator<char> >::size() const'
cchoIFCt.o:test.cpp:(.text+0x60): undefined reference to `std::basic_string<char, std::char_traits<char>, std::allocator<char> >::operator[](unsigned int) const'
cchoIFCt.o:test.cpp:(.text+0x9f): undefined reference to `std::basic_string<char, std::char_traits<char>, std::allocator<char> >::operator[](unsigned int) const'
cchoIFCt.o:test.cpp:(.text+0xce): undefined reference to `std::basic_string<char, std::char_traits<char>, std::allocator<char> >::operator[](unsigned int) const'
cchoIFCt.o:test.cpp:(.text+0x135): undefined reference to `std::cout'
cchoIFCt.o:test.cpp:(.text+0x13a): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
cchoIFCt.o:test.cpp:(.text+0x142): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)'
cchoIFCt.o:test.cpp:(.text+0x14a): undefined reference to `std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))'
cchoIFCt.o:test.cpp:(.text+0x173): undefined reference to `std::ios_base::Init::Init()'
cchoIFCt.o:test.cpp:(.text+0x18e): undefined reference to `std::ios_base::Init::~Init()'
collect2: ld gab 1 als Ende-Status zur"uck
```

Ich dachte erst, er findet die include Dateien nicht, so habe ich es auch mal so probiert:


```
gcc test.cpp -I"D:/Programme/cygwin/lib/gcc/i686-pc-cygwin/3.4.4/include/c++"
```

Aber es erscheinen dieselben Fehlermeldungen.


Ich würde mich sehr freuen, wenn da jemand etwas Licht ins Dunkel bringen könnte.

P.S.:

```
>gcc --version
gcc (GCC) 3.4.4 (cygming special, gdc 0.12, using dmd 0.125)
```


Vielen Dank für Eure Hilfe!


----------



## MCoder (25. Juli 2008)

Hallo, du hast ein C++ Programm und must daher "g++" statt "gcc" verwenden.

Gruß
MCoder


----------



## DarthShader (25. Juli 2008)

MCoder hat gesagt.:


> Hallo, du hast ein C++ Programm und must daher "g++" statt "gcc" verwenden.




Vielen Dank für Deine schnelle Antwort - es klappt nun. Aber ich bin etwas verwirrt, gcc hat doch die Option "-x" mit der man die Sprache angeben kann, also z.B. "gcc -x cpp test.cpp" damit er C++ verwendet, aber das funktioniert nicht. Wo ist der Unterschied zwischen "gcc -x cpp" und "g++"?


----------



## devDevil (25. Juli 2008)

Nja sagst dem nur, dass es C++-Files sind,nen C-Compiler kommt dennoch nicht damit klar


----------



## vfl_freak (25. Juli 2008)

Hallo zusammen,

genau!! ;-)

Der *gcc* ist ausschließlich für C-Code!!
Der *g++* für C++-Code; da aber C eine Teilmenge von C++ ist, klappt es auch mit dem g++ für C-Code!! Nur eben nicht umgekehrt!!

Und die Dateiextension *.cpp* sagt ja auch nicht wirklich was über den Inhalt aus (also ob OOP oder ob C++-spezifische Elemente verwendet werden)  ...

tschüss
Klaus


----------



## DarthShader (25. Juli 2008)

Hallo,

vielen Dank für Eure Antworten.

Was mir immer noch nicht klar ist, warum sollte man dann einen reinen C-Compiler sagen können, dass es sich um C++ sourcecode handelt, was hat das für einen Sinn?


----------



## Matthias Reitinger (25. Juli 2008)

vfl_freak hat gesagt.:


> Der *gcc* ist ausschließlich für C-Code!!
> Der *g++* für C++-Code; da aber C eine Teilmenge von C++ ist, klappt es auch mit dem g++ für C-Code!! Nur eben nicht umgekehrt!!


Unsinn. GCC steht nicht umsonst für „GNU Compiler Collection“. g++ ruft auch nur gcc auf und sorgt u.a. dafür, dass die C++-Standardbibliothek gelinkt wird. Wie man an der Ausgabe von gcc im Ursprungsbeitrag sieht, wird die Datei auch fehlerfrei kompiliert, nur das Linken schlägt fehl. Bindet man die Stdlib händisch ein, klappt es auch ohne den Umweg über g++:

```
gcc test.cpp -lstdc++
```

Was aber natürlich nicht heißen soll, dass man g++ nicht verwenden sollte; im Gegenteil.

Grüße,
Matthias


----------



## DarthShader (25. Juli 2008)

Matthias Reitinger hat gesagt.:


> Unsinn. GCC steht nicht umsonst für „GNU Compiler Collection“. g++ ruft auch nur gcc auf und sorgt u.a. dafür, dass die C++-Standardbibliothek gelinkt wird. Wie man an der Ausgabe von gcc im Ursprungsbeitrag sieht, wird die Datei auch fehlerfrei kompiliert, nur das Linken schlägt fehl. Bindet man die Stdlib händisch ein, klappt es auch ohne den Umweg über g++:
> 
> ```
> gcc test.cpp -lstdc++
> ```



Ah vielen Dank für diese Erklärung, nun wird mir auch einiges klar 



Matthias Reitinger hat gesagt.:


> Was aber natürlich nicht heißen soll, dass man g++ nicht verwenden sollte; im Gegenteil.



Weshalb?


----------



## computerlord52 (26. Juli 2008)

und was braucht man jetzt um denn c++ code auszuführen?
weil mit g++ funktioniert es nicht: (fehlermeldung bei mir) 
C:\Users\Admin\Desktop>g++ kegel.ccp

kegel.ccp: file not recognized: File format not recognized
collect2: ld returned 1 exit status

Bitte Helft mir
Gruss
Jan


----------



## RedWing (26. Juli 2008)

Hallo,

ersetz mal das 2. c durch ein p im Dateinamen- Suffix. Sagt die Fehlermeldung aber eigtl. schon 

Gruß,
RedWing


----------

