Ubuntu, C++ Programm kompilieren

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Mad Andy.

    Ubuntu, C++ Programm kompilieren

    Hallo Comm,
    ich beschäftige mich zZ ein wenig mit Linux (Ubuntu 9.04) ud wollte jetzt gerade mal ein kleines C++ Programm schreiben, kompilieren und ausführen.
    Also habe ich eine Datei namens main.cpp erstellt und in gEdit geöffnet und den Code eingetippt:

    C-Quellcode

    1. #include <iostream>
    2. int main()
    3. {
    4. std::cout << "Hallo Welt";
    5. std::cin.get();
    6. return 0;
    7. }

    zum kompilieren, habe ich erstmal g++ installiert mit dem Befehl:

    Quellcode

    1. sudo apt-get install g++
    das hat auch funktioniert.
    zum kompilieren habe ich erstmal im terminal zum Ordner navigiert und dann

    Quellcode

    1. g++ main.cpp

    eingetippt. das ging auch völlig ohne Fehlermeldungen.
    dabei ist eine Datei namens a.out rausgekommen. Im Dateiexplorer lässt sich diese Datei nicht starten, da passiert einfach nichts. Da habe ich den Befehl eingetippt:

    Quellcode

    1. sudo sh a.out

    die gesamte ausgabe:

    Quellcode

    1. oliver@oliver-desktop:~/Desktop/ncpppro$ g++ main.cpp
    2. oliver@oliver-desktop:~/Desktop/ncpppro$ sudo sh a.out
    3. a.out: 1: Syntax error: word unexpected (expecting ")")
    4. oliver@oliver-desktop:~/Desktop/ncpppro$

    ohne installation.
    Was mache ich falsch? oder wie kann ich mein Programm anderweitig starten/kompilieren?

    danke im vorraus
    progglord
    aber der Code ist doch richtig oder?
    außerdem:
    ich hab das ganze mal mit Code::Blocks gemacht, der gleiche Code und kompiliert, da läuft es, und dann habe ich in den Ordner der Ausgabe von Code::Blocks navigiert und sudo sh g eingegeben (g ist das programm) und dann gabs den gleichen Fehler ?(, ehe ihr fragt: ich will Code::Blocks jetzt nicht nutzen, weil mir das zu vollgestopft ist (hab ubuntu auf einer Virtuellen Maschine laufen^^)
    g++ != gcc
    GCC verwandelt den C-Code in .lib bzw. .a Dateien um. Diese werden dann mit g++ gelinkt (nötige Abhängigkeiten usw).
    Also machst du es so:

    Quellcode

    1. gcc main.cpp
    2. g++ main.a


    Damit sowas einfacher geht gibt es auch Makefiles ;)

    Gruß
    To make foobar2000 a real random music player, I figured out the only way to achieve this is to use Windows Media Player.

    At some point in time, you recognize that knowing more does not necessarily make you more happy.
    danke, aber:

    Quellcode

    1. oliver@oliver-desktop:~/Desktop$ gcc -x c++ -o main.a main.cpp
    2. /tmp/ccWiCAr2.o: In function `__static_initialization_and_destruction_0(int, int)':
    3. main.cpp:(.text+0x1d): undefined reference to `std::ios_base::Init::Init()'
    4. main.cpp:(.text+0x22): undefined reference to `std::ios_base::Init::~Init()'
    5. /tmp/ccWiCAr2.o: In function `main':
    6. main.cpp:(.text+0x78): undefined reference to `std::cout'
    7. main.cpp:(.text+0x7d): 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*)'
    8. main.cpp:(.text+0x85): 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> >&)'
    9. main.cpp:(.text+0x8d): 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> >&))'
    10. main.cpp:(.text+0x94): undefined reference to `std::cin'
    11. main.cpp:(.text+0x99): undefined reference to `std::basic_istream<char, std::char_traits<char> >::get()'
    12. /tmp/ccWiCAr2.o:(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'
    13. collect2: ld gab 1 als Ende-Status zurück
    14. oliver@oliver-desktop:~/Desktop$

    ?(
    der code ist der gleiche
    mhh...war warscheinlich nicht das neuste ^^ aber aufjedenfall aht er nicht gesagt das es schon das neuste ist ;)
    wie kann ich denn so ein MakeFile erstellen (hab schon google bemüht, hab aber nichts verstanden) und wie kann man das MakeFile dann im Terminal ausführen?
    wäre nett wenn mir das mal jemand erklärt :thumbup:

    EDIT: habs hinbekommen (also das ausführen, nicht makefile)
    so:

    Quellcode

    1. sudo apt-get install build-essential
    2. [Warten bis builds-essential installiert ist]
    3. g++ -o main main.cpp
    4. ./main

    ^^
    hier die Anleitung:
    tutorials.de/forum/linux-tutor…unter-und-fuer-linux.html

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „progglord“ ()

    also dass du mit sh ein binary interpretieren lassen wolltest, is ja schon echt krass..
    Wenn der Inhalt (Header) der Datei passt, dann brauchste immer nur ./name - bei Scripts sowie bei Binaries.

    (Makefile) bei größeren Projekten nimmste da am Besten ne IDE, die das für dich erledigt. Mein aktuelles Projekt hat so um die 20 Sources und 2 Configs (Debug, Release) und das is dann schon ziemlich nervig alles händisch in ein Makefile einzutragen :D
    Ausführen tust dus mit make [aktion] im Verzeichnis, wo das Makefile liegt.
    Die üblichen Aktionen, dies eig. immer gibt, sind make all und make clean. Wenn du nur make eingibst (ohne Aktion), wird ebenfalls make all ausgeführt.

    Edit: wenn du ohne IDE arbeiten willst, kannst du dir auch den Artikel im ubuntuusers Wiki (+ weiterführende Links) angucken.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Mad Andy“ ()