Frage

Ich bin mit einer GLFW app (die ich in C geschrieben ++)

Ich laufe es wie folgt:

./prog.app/Contents/MacOS/prog # from the command line

Allerdings kann mein Code nicht Relativ pathed Dateien korrekt lesen.

So glaube ich, was passiert ist, dass der Mac Bundle mein aktuelles Verzeichnis ändert.

1) Was bedeutet es, es ändern? 2) kann ich steuern das?

Danke!

War es hilfreich?

Lösung

Nehmen Sie keine Annahmen über das aktuelle Arbeitsverzeichnis, wenn die App gestartet wird. Der Finder ist maßen konsistent darüber, aber es ist nicht der einzige Weg, um eine App zu starten. Wenn unter Xcode Debuggen zum Beispiel wird das anfängliche Arbeitsverzeichnis unterschiedlich sein, und es gibt verschiedene andere Verfahren, die wie erwartet oder auch nicht das Arbeitsverzeichnis festgelegt. Sie sollten Ihre Anwendung testen, indem es von der Kommandozeile in einem völlig unabhängig Verzeichnis gestartet -. Wenn es noch seine Dateien unter dieser Bedingung findet dann Sie in guter Form sind

Andere Tipps

Sie können hier dieses Stück Code verwenden, um die Lage von prog zu erfahren.

#include <mach-o/dyld.h>

char exe_path[MAXPATHLEN];
char link_path[MAXPATHLEN];

uint32_t size = sizeof(exe_path);
if (_NSGetExecutablePath(exe_path, &size) != 0)
    assert();

if (realpath(exe_path, link_path) == 0)
    assert();

return link_path; 

Häufig ist es der Home-Verzeichnis des Benutzers. Ich bin mir nicht sicher, ob das garantiert wird, aber Sie können chdir () innerhalb Cocoa-Apps nutzen. Je nach Bedarf können die Nutzer eine bessere Erfahrung, wenn Sie Dateisystem Lesezeichen verwenden (10.6+) oder eines Pseudonyms (früher). Oder auch absolute Pfade, die Arbeitsverzeichnis noch robust sind gegen Veränderung.

Wenn Sie die GLFW Quellen zu buchen, müssen Sie auf OSX während sehen init es ändert sich ausdrücklich das aktuelle Verzeichnis. Schauen Sie hier und scrollen Sie nach unten, um über Leitung 236 (oder suchen nach chdir).

finde ich Ihre Frage SO, weil ich zur Zeit bin versucht zu verstehen, warum GLFW eine explizite Chdir während init tut. Ich entdeckte das, weil ich ein Programm, das auf allen Plattformen außer OSX funktioniert. Auf OSX kann es nicht, dass es Datendateien mit einem relativen Pfad finden. Meine temporäre Lösung ist das aktuelle Verzeichnis, wenn der Haupt beginnt zu erhalten und setzen Sie das aktuelle Verzeichnis nach GLFW initialisiert wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top