Question

Je suis en cours d'exécution d'une application GLFW (que j'ai écrit en C ++)

Je cours comme suit:

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

Cependant, mon code ne peut pas lire les fichiers relatifs-bien à chemins.

Je crois donc ce qui se passe est que ce Mac Bundle est en train de changer mon répertoire courant.

1) qu'est-ce que ça change pour? 2) puis-je contrôler cela?

Merci!

Était-ce utile?

La solution

Ne jamais faire aucune hypothèse sur le répertoire de travail courant lorsque votre application est lancée. Le Finder est raisonnablement cohérente à ce sujet, mais ce n'est pas la seule façon de lancer une application. Lors du débogage sous Xcode par exemple le répertoire de travail initial sera différent, et il existe d'autres méthodes qui peuvent ou peuvent ne pas définir le répertoire de travail comme prévu. Vous devez tester votre application en lançant depuis la ligne de commande dans un répertoire totalement indépendant -. Si elle trouve encore ses fichiers sous cette condition, alors vous êtes en bonne forme

Autres conseils

Vous pourrez peut-être utiliser ce morceau de code pour trouver l'emplacement de prog.

#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; 

Souvent, il est le répertoire de l'utilisateur. Je ne sais pas si cela est garanti, mais vous pouvez utiliser chdir () à l'intérieur des applications Cocoa. En fonction de vos besoins, les utilisateurs peuvent avoir une meilleure expérience si vous utilisez les signets du système de fichiers (10.6+) ou des alias (plus tôt). Ou même des chemins absolus, qui sont encore robustes contre le changement répertoire de travail.

Si vous regardez les sources glfw, vous verrez que sur OSX au cours d'initialisation, il modifie explicitement le répertoire courant. Regardez ici faites défiler jusqu'à environ la ligne 236 (ou recherchez chdir).

Je trouve votre question parce que je suis en train d'essayer de comprendre pourquoi GLFW fait un chdir explicite au cours d'initialisation. J'ai découvert parce que j'ai un programme qui fonctionne sur toutes les plateformes sauf OSX. Sur OSX, il ne peut pas le trouver de fichiers de données en utilisant un chemin relatif. Ma solution temporaire est d'obtenir le répertoire courant lorsque les principaux départs et réinitialiser le répertoire courant après l'initialisation GLFW.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top