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

DarthShader

Erfahrenes Mitglied
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:

Code:
#include <iostream>

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

Ich versuche, es so zu kompilieren:

Code:
gcc test.cpp

Dann kommt jedoch leider folgender Fehler:

Code:
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:

Code:
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.:
Code:
>gcc --version
gcc (GCC) 3.4.4 (cygming special, gdc 0.12, using dmd 0.125)


Vielen Dank für Eure Hilfe!
 
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++"?
 
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
 
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?
 
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++:
Code:
gcc test.cpp -lstdc++

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

Grüße,
Matthias
 
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++:
Code:
gcc test.cpp -lstdc++

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

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

Weshalb?
 
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
 
Hallo,

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

Gruß,
RedWing
 
Zurück