GCC will net so richtig...
-
Hi! ich hab ein (wahrscheinlich ganz einfach zu loesendes) Problem mit dem GCC:
ich hab seit ein paar Tagen Linux installiert, und wollte damit mal ein wenig herumspielen. Wolle natuerlich auch den GCC ausprobieren. Hab dazu folgendes Beispielprogramm geschrieben:
#include <iostream> using namespace std; int main() { cout << "Hello, World!" << endl; return 0; }
.... und ich kompiliere es mit folgendem Aufruf...
[tom@blueComp hello_test]$ gcc main.cpp
... und bekomm einen unerwarten grossen Haufen Fehlermeldungen:
/tmp/ccMvyGlw.o(.text+0x14): In function `main': : 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> >&)' /tmp/ccMvyGlw.o(.text+0x21): In function `main': : undefined reference to `std::cout' /tmp/ccMvyGlw.o(.text+0x26): In function `main': : 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*)' /tmp/ccMvyGlw.o(.text+0x2f): In function `main': : 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> >&))' /tmp/ccMvyGlw.o(.text+0x5c): In function `__static_initialization_and_destruction_0(int, int)': : undefined reference to `std::ios_base::Init::Init[in-charge]()' /tmp/ccMvyGlw.o(.text+0x8b): In function `__tcf_0': : undefined reference to `std::ios_base::Init::~Init [in-charge]()' /tmp/ccMvyGlw.o(.eh_frame+0x11): undefined reference to `__gxx_personality_v0' collect2: ld returned 1 exit status
wieso schafft er nicht mal so ein einfaches Hello-Word Beispiel??? Meine SDL-Programme kompilieren mit KDevelop problemlos, also liegts wohl nicht daran dass irgendwas an meinem GCC nicht stimmt...
BTW: wenn ich das include und das cout weglasse (also nur noch das "return 0" in main() ), kompiliert GCC das Ganze in ein "a.out"... aber ausfuehren laesst sich das nicht... wieso net?
-
Warum verwendest du denn den C Compiler um ein C++ Programm zu kompilieren?
Nimm mal g++ statt gcc, dann funktioniert das ganze auch.
-
Original erstellt von Descartes:
Warum verwendest du denn den C Compiler um ein C++ Programm zu kompilieren?<genau-sei> Ne. Der gcc is nich der C-Compiler. Compilieren kann `which gcc` auch C++-Files. Nur wird es mit der libc und nicht der libc++ gelinkt. </>
-
hmm... ich dachte g++ ruft ja auch nur den GCC auf... na egal, soweit funktioniert das ganze jetzt ja, thx
anderes Problem: g++ produziert eine Datei namens "a.out", mit der kann ich aber nix anfangen
-
Wenn du dem gcc bzw. g++ nicht mit dem Parameter -o <Dateiname> den Dateinamen der zu erstellenden Binary mitteilst, benennt der Compiler das Programm ganz einfach "Assembler Out" also "a.out"
[tom@blueComp hello_test]$ g++ -o mein_programm main.cpp [tom@blueComp hello_test]$ ./mein_programm
Auszug aus der Manpage g++(1) bzw. gcc(1):
GCC(1) GNU GCC(1) NAME gcc - GNU project C and C++ compiler SYNOPSIS gcc [-c|-S|-E] [-std=standard] [-g] [-pg] [-Olevel] [-Wwarn...] [-pedantic] [-Idir...] [-Ldir...] [-Dmacro[=defn]...] [-Umacro] [-foption...] [-mmachine-option...] [-o outfile] infile... ... -o file Place output in file file. This applies regardless to whatever sort of output is being produced, whether it be an executable file, an object file, an assembler file or preprocessed C code. Since only one output file can be specified, it does not make sense to use -o when compiling more than one input file, unless you are producing an executable file as output. If -o is not specified, the default is to put an exe- cutable file in a.out, the object file for source.suf- fix in source.o, its assembler file in source.s, and all preprocessed C source on standard output. ...