C++ - Compiliert, startet aber nicht!
Hey !
Was mich schon die ganze Zeit immer gewundert hat, wenn ich mal z.B. ein Hello World Programm schreibe und es kompiliere, dann funktioniert das Programm nicht, wenn ich es per Doppelklick starten will...
Also so wäre der Code :
#include iostream
int main(){
std::cout << "Hello World";
}
Hier konnte ich nicht schreiben... also nicht wundern, dass dort oben die "<>" fehlen ^^
Wenn ich das jetzt also kompiliere (Terminal ->g++ -o Test test.cpp), dann entsteht ein Programm namens Test.out oder a.out wenn ich nicht (-o Test) angegeben hätte.
Ich arbeite unter Linux und habe auch versucht unter den Einstellungen
"als Programm auszuführen"...
Hatte wieder nicht geklappt ;)
Ich muss jetzt also jedes Mal im Terminal das eingeben :
./a.out // oder ./Test.out
Dann kriege ich auch mein "Hello World"..
Wieso kann ich es nicht per Doppelklick starten?!
Auch wenn ich cin << x; eingebe und dann halt auf eine Eingabe warte, startet es nicht (hatte den Verdacht, dass sich das Programm einfach nur zu schnell schliesst, als das ich es hätte lesen können)
2 Antworten
mit dem Compilieren einer C++-Quelle erzeugst du ein Binary, ein ausführbares Programm. Das hast du ja auch alles richtig gemacht.
Doppelklicks (worauf eigentlich ?) wirken doch nur im Zusammenarbeit des Windowmanagers mit einem GUI (einem grafischen Element, das den Doppelklick auswertet und dann das betreffende Binary startet)
Wie du so einen "Starter" erzeugst, hängt vom Windowmanager ab (KDE, GNOME ...) Die Ausgabe "Hello World" muss dann aber auch auf ein grafisches Fenster erfolgen. Dafür reicht aber der eine Befehl std::cout << "Hello World" nicht aus.
Wenn du schnell solche GUI's haben möchtest, dann mache das mit Tcl/Tk, einer Scriptsprache mit einem ToolKit für grafische Elemente.
Also, ich bin zwar noch kein Experte jedoch kann ich dir etwas sagen:
Wenn du das Programm mit einem Doppelklick ausführst bekommst du ebenfalls deine "Hello World" Ausgabe. Allerdings ist die so unglaublich datenunaufwändig dass die Meldung für einen Bruchteil einer Sekunde als Terminal da auftaucht, der wahrscheinlich einfach nicht dargestellt wird wegen Effekten von compiz die mehr zeit beanspruchen. So wie du da gearbeitet hast, hast du ein Konsolenprogramm erstellt. Das ist der Anfang.
Ausserdem solltest du den compiler in 3 schritten benutzen
g++ -c -o main.o main.cpp
g++ -o Test main.o
./Test
Das ist aktuell eine Lösung deines Problemes dass du das Programm nicht wirklich selber benennen kannst. Und auch in zukunft solltest du immer wie oben genannt vorgehen, falls du mal mit mehreren Dateien arbeitest in denen dein Quellcode vorhanden ist. Wie genau das dann läuft weiss ich selbst nicht so genau, ich bin aktuell aber in der Ausbildung ;D
Hoffe ich konnte dir helfen.
LG XenonLightz
ein Hinweis an alle:
schaut euch mal die Makefile der diversen Pakete an. Ein
locate Makefile
liefert euch jede Menge Beispiele. Mit Befehlen wie
apropos Makefile
apropos Make
man make
info make
bekommt man weitere Informationen (und dabei dürfte die Distribution keine Rolle spielen. Die genannten Kommandos sind meistens Bestandteil. Wenn nein, sind locate und info schnell installiert.
Danke, aber was meinst du mit dem selber bennennen?`Ich weiß schon wie man den g++ Compiler benutzt und auch wie man dem Programm automatisch einen Namen gibt... ich weiß nur nicht, warum sich keine Console öffnet ^^
Wenn Terminal sich nur ganz kurz öffnet, wieso öffnet der sich trotzdem nicht, wenn ich cin benutze? Dann muss Terminal doch eigentlich auf eine Eingabe warten...