ubuntuusers.de

C++ mit g++

Status: Ungelöst | Ubuntu-Version: Ubuntu 10.10 (Maverick Meerkat)
Antworten |

Ck1

Anmeldungsdatum:
24. Juni 2007

Beiträge: 9

Wohnort: Leipzig

Hallo allerseits

vor kurzen habe ich den Schritt von Windows Vista zu Ubuntu gewagt. Bisher bin ich auch sehr zufrieden mit Ubuntu. Aber eine Sache bekomme ich irgendwie nicht hin. Ich programmiere mir ab und an mal kleine Hilfsprogramme für die Konsole. Das soll ja in Linux auch alles sehr einfach gehen. Also habe ich mich ran gemacht und mir eine kleine test Datei erstellt.

#include <iostream> using namespace std;

int main(){

cout << "Hello World!!!" << endl;

return 0;

}

Die habe ich dann unter dem Dateinamen HalloWorld.cpp abgespeichert. Danach habe ich dann die Konsole geöffnet und die Datei mit g++ mit folgenden Befehl übersetzt:

g++ HelloWorld.cpp -o Versuch

Das funktioniert dann auch alles Wunderbar und ich bekomme eine Ausführbare Datei. Das Problem ist jetzt das ich diese Ausführbare Datei nicht ausführen kann. Wenn ich die Datei mit Doppelklick öffnen will passiert gar nix. Gebe ich in der Konsole im richtigen Verzeichnis "Versuch" ein sagt er mit das er diesen Befehl nicht kennt.

Wie kriege ich es hin das ich dieses einfache Programm ausführen kann??? Muss ich da noch irgendwas an den Rechten ändern?

Kurdder

Anmeldungsdatum:
12. April 2009

Beiträge: 85

Wohnort: P-Town (RLP)

Einfach doppelklicken ist nicht immer hilfreich 😉

In der Konsole ins Verzeichnis wechseln und dann

1
./*dateiname*

eingeben.

Ansonsten mit chown bzw chmod die rechte ändern und in nautilus ausführen 😉

MfG Kurdder

P.S.:Bitte verwende für zukünftige Foreneinträge Codeblöcke, wenn du einen Programmauszugs postest, um ihm schnell lesbarer zu machen ☺

Vain

Avatar von Vain

Anmeldungsdatum:
12. April 2008

Beiträge: 2505

Hallo und Willkommen, ☺

das ist bis hierhin alles korrekt. Der Compiler setzt dir die Rechte auch bereits richtig. Du stolperst nur über zwei Dinge:

  • Bei der Ausführung musst du an der Shell

     ./Versuch 

    eingeben statt nur:

     Versuch 

    Linux hat eine andere Suchreihenfolge für ausführbare Programme als DOS. Mit einem reinen „Versuch“ meinst du die Datei „Versuch“ im aktuellen Verzeichnis, aber Linux sucht dort nicht danach, sondern nur in den Pfaden, die in der Umgebungsvariablen „$PATH“ angegeben sind. Du musst also entweder explizit sagen, „ich meine die Datei im aktuellen Verzeichnis“, was mit dem vorangestellten „./“ geht, oder du bringst dein Programm in eines der Verzeichnisse aus „$PATH“. Von letzterem möchte ich dir aber abraten, weil man das eigentlich nur für systemweit installierte Programme macht (also solche, die für alle Benutzer des Systems gelten sollen). Gewöhne dir lieber an, den Punkt und den Strich voranzusetzen.

  • Bei der Ausführung mit dem Doppelklick erwartest du, dass implizit ein Terminal-Fenster geöffnet wird, in dem deine Ausgabe erscheinen soll. Das ist aber nicht der Fall. Linux kennt keine Unterscheidung zwischen „Konsolenprogramm“ und „Programm mit GUI“, also kann es nicht automatisch ein Terminal öffnen – außerdem will man das auch nicht immer. Wenn du also ein Terminal zur Ausgabe willst, dann musst du es selbst öffnen. Aber eigentlich solltest du gerade am Anfang ohnehin dein Programm direkt über’s Terminal starten (also wie oben mit „./Versuch“) und nicht über einen Doppelklick. Dient der Eingewöhnung. ☺

Vielleicht schnappst du dir mal einen Einführungsguide für die Shell, dort sind solche Feinheiten meistens auch beschrieben. Und wenn du etwas vertrauter damit bist, dann kannst du dir mal Shell-Aliases und Shell-Funktionen anschauen und später dann Skriptsprachen wie Python, Ruby, Perl. Was du oben erwähntest mit „das soll ja in Linux sehr einfach gehen“, bezieht sich hauptsächlich auf die Mächtigkeit der Shell und die nahtlose Einbindung von interpretierten Sprachen. Das alles wirkt am Anfang sehr komplex und verwirrend, gibt sich aber mit der Zeit. ☺

Ck1

(Themenstarter)

Anmeldungsdatum:
24. Juni 2007

Beiträge: 9

Wohnort: Leipzig

ok in der Konsole klappt es jetzt.

Im nautilus mit Doppelklick haut es noch nicht hin. Habe bei Eigenschaften->Zugriffsrechte "Lesen und Schreiben" eingestellt.

jetzt schau ich mir erstmal chown und chmod an;)

Danke für die Hilfe

Ck1

(Themenstarter)

Anmeldungsdatum:
24. Juni 2007

Beiträge: 9

Wohnort: Leipzig

ok dann ist jetzt alles klar. hatte erwartet das wie bei Win bei einen Doppelklick ein Konsolenfenster aufgeht. Wenn das bei Ubuntu nicht geht dann ist das nicht weiter schlimm. Muss ich halt 2 -3 mal mehr in die Konsole und das übt;)

Danke für die schnellen Antworten.

tischbein

Avatar von tischbein

Anmeldungsdatum:
21. Juli 2008

Beiträge: 404

Ck1 schrieb:

ok dann ist jetzt alles klar. hatte erwartet das wie bei Win bei einen Doppelklick ein Konsolenfenster aufgeht. Wenn das bei Ubuntu nicht geht dann ist das nicht weiter schlimm. Muss ich halt 2 -3 mal mehr in die Konsole und das übt;)

das liegt daran, weil es unter Windows zwei verschiedene versionen von Programmen gibt:

  • console: Ein konsolen-basiertes programm, welches nach stdout (standard ausgabe) oder stderr (standard fehlerausgabe) schreibt, und deswegen IMMER ein konsolenfenster vorraussetzt

  • windows: Ein programm welches nicht zwingend die fähigkeiten der konsole beansprucht (bei dem man aber dennoch auf stdout und stderr schreiben kann)

Diese subtile, aber dennoch wichtige unterscheidung existiert bei Linux nicht; Unter Linux kann ein programm synchron sowohl auf terminal-funktionen als auch X11 funktionen zugreifen. Darum öffnet dein programm auch kein Terminal.

HTH

Ck1

(Themenstarter)

Anmeldungsdatum:
24. Juni 2007

Beiträge: 9

Wohnort: Leipzig

ok also es stört mich nicht das ich solche Programme nur aus der Konsole aufrufen kann.

Aber mal so zum Verständnis. Wenn ich meine kleines mini Programm im nautilus Doppelklicke. Läuft es dann im Hintergrund trotzdem ab. Ich sehe nur nix. Oder wird das Programm gar nicht gestartet?

Ck1

(Themenstarter)

Anmeldungsdatum:
24. Juni 2007

Beiträge: 9

Wohnort: Leipzig

so ok musste erst mal Kartoffeln schälen und dabei kommen einen Manchmal Ideen;)

Ich habe mein Simples Programm mal etwas verändert.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15

#include <iostream> 
#include <fstream>
using namespace std;

int main()
{

    	fstream f;
    	f.open("test.txt", ios::out);
    	f << "Hallo Welt" << endl;
    	f.close();
	cout << "Hallo Welt !!!" << endl;
	return 0;
}   

und damit habe ich dann gleich mal meine Frage selbst beantwortet. Nach dem Doppelklick erscheint eine neue Datei im Ordner. Also läuft das Programm im Hintergrund ab.

tischbein

Avatar von tischbein

Anmeldungsdatum:
21. Juli 2008

Beiträge: 404

Ck1 schrieb:

ok also es stört mich nicht das ich solche Programme nur aus der Konsole aufrufen kann.

Aber mal so zum Verständnis. Wenn ich meine kleines mini Programm im nautilus Doppelklicke. Läuft es dann im Hintergrund trotzdem ab. Ich sehe nur nix. Oder wird das Programm gar nicht gestartet?

Das programm läuft dennoch, nur geht die ausgabe sozusagen "verloren" (Läuft also im hintergrund, wie du es schon gesagt hast). 😉

Antworten |