[c++/Linux] Programm im selben Ordner ausführen

Hallo!
Ich habe ein Problem mit einem Programm:
Es sollt nur im selben Ordner ausgeführt werden, in dem auch die ausführbare Datei liegt. Bei einem Doppelklick allerdings wird sie im Home-Verzeichnis ausgeführt.
Dabei taucht jetzt das Problem auf, dass das Programm jetzt sämtliche Konfigurations- und Mediendateien nicht mehr finden kann. (Die Pfade sind ja i.d.R. relativ angegeben)
Normalerweise könnte man dafür jetzt ein zweizeiliges Bash-Script schreiben, aber da hat nicht jeder Lust zu, dem ich das Programm gebe. ^^
Hat da jemand eine Idee? Das Google-Orakel konnte mir leider nicht helfen...

Thx im voraus.
 
Von welchem Desktop Environment bzw. von welchem Filemanager aus startest du das Programm? Komisch, dass die executable mit ~ als working-directory ausgeführt wird...

im Grunde ist daran aber nichts falsch, dass man ein Programm aus dem richtigen Verzeichnis heraus ausführen muss. ändern könnte man das zum beispiel, indem man eine kommandozeilenoption "--datadir" hinzufügt, bei der man dann das Verzeichnis mit den Daten angeben kann. In deinem Fall hilft das allerdings auch nicht wirklich weiter.

Was du allerdings machen könntest, ist folgendes (falls du in C oder C++ programmierst):
in argv[0] steht der pfad zum programmbinary drin, über das das programm aufgerufen wurde, falls es also vom home-verzeichnis aus z.B. per "./Desktop/downloads/programmname/programm" gestartet wurde, steht genau dieser String in argv[0] und du kannst daraus den Teil "./Desktop/downloads/programmname/" herausfiltern und damit dann auf das programmverzeichnis (und damit auch auf die darin enthaltenen Daten) zugreifen, egal, von wo aus das Programm aufgerufen wurde.
 
Thx, das mit dem argv[0] ist generell eine gute Idee.
Btw.: Ich benutze Kubuntu mit dem Filemanager Dolphin, habe es aber auch mit Nautilus probiert. Das Problem scheint aber doch ein anderes zu sein, als ich gedacht habe...
Ich dachte, dass das Programm sich aufhängt, liegt daran das es die Config-Dateien nicht findet. Das tut es sonst auch immer, wenn ich es aus Eclipse heraus starte.
Nun habe ich es log-Files erstellen lassen und festgestellt, dass keine Log-Files auftauchen. (also keine Fehler)
Weder im Programmordner noch im Home-Verzeichnis.
Aber das Programmfenster tauch einfach nicht auf, nur das Programm in der Prozessliste.
Btw. funktioniert das Programm einwandfrei, wenn ich es über die Konsole starte.
Das verwirrt mich...

Btw.: Das ist in C++ geschrieben, mit SDL als grafischer Oberfläche.
 
Ich hab' meine Glaskugel leider gerade net hier...
Du koenntest aber auch einfach mal den Teil deines Progammes hier posten, der net funktioniert.

Wie soll dir jemand helfen, wenn du hier keine Informationen preis gibst?

MfG - Keks :)
 
Du koenntest aber auch einfach mal den Teil deines Progammes hier posten, der net funktioniert.
Das ist doch das Problem: Ich habe keine Ahnung, warum sich nichts öffnet. Denn wenn ich es anders als mit Doppelklick öffne, funktioniert es ja. Sprich über die Konsole und aus der Eclipse GUI. Auch die Windows-Portierung läuft einwandfrei per Doppelklick und Konsole.
Darum dachte ich auch, es werde im falschen Ordner ausgeführt.

Edit:Hat sich erledigt. Es lag an Dolphin... Nur frage ich mich, warum es beim ersten Test mit Nautilus auch nicht geklappt hat.?
Dafür fliegt Dolphin von Platte. 2 Stunden Rätseln und ein Systemabstruz wegen ca. 15 mal dem selben Hintergrundprogramm. >.>
 
stellst du sicher, dass Die Logfiles auch wirklich auf die Festplatte geschrieben werden, bevor sich das Programm beendet? Es wäre schlecht, wenn das Betriebssystem die Schreibzugriffe cachen würde, und nicht mehr dazukommt, die Logs auf die Festplatte zu speichern, bevor das Programm abstürzt. Deshalb ggf. mit flush() nachhelfen.

beim Ausführen von der Konsole aus: Hast du getestet, was passiert, wenn du es zwar von der Konsole aus aufrufst, aber NICHT aus dem Verzeichnis heraus, sondern von anderswo?

falls es dann nicht klappt, rufe es gleich nochmal von da aus auf, aber diesmal mit einem debugger (kennst du die grundlegenden befehle von GDB?).


EDIT: achso, ok :D
 
Zurück
Oben