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.
    ...
    

Anmelden zum Antworten