Pregunta

Estoy corriendo una aplicación GLFW (que he escrito en C ++)

corro de la siguiente manera:

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

Sin embargo, el código no puede leer los archivos relativos-pathed correctamente.

Así que creo que lo que está sucediendo es que este Mac Bundle está cambiando mi directorio actual.

1) ¿qué cambiarlo a? 2) ¿Puedo controlar esto?

Gracias!

¿Fue útil?

Solución

Nunca hacer ninguna suposición sobre el directorio de trabajo actual cuando se inicia la aplicación. El Finder es razonablemente coherente acerca de esto, pero no es la única manera de lanzar una aplicación. Al depurar bajo Xcode por ejemplo, el directorio de trabajo inicial será diferente, y hay varios otros métodos que pueden o no establecer el directorio de trabajo como se esperaba. Debe probar su aplicación con el lanzamiento desde la línea de comandos en un directorio totalmente sin relación -. Si todavía encuentra sus archivos bajo esta condición, entonces estás en buena forma

Otros consejos

Es posible que pueda usar esta pieza de código para averiguar la ubicación 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; 

Con frecuencia es el directorio inicial del usuario. No estoy seguro de si eso está garantizado, pero se puede utilizar chdir () dentro de aplicaciones Cocoa. Dependiendo de sus necesidades, los usuarios pueden tener una mejor experiencia si utiliza marcadores de sistema de archivos (10.6+) o alias (anterior). O incluso rutas absolutas, que siguen siendo robusta en contra de cambiar el directorio de trabajo.

Si nos fijamos en las fuentes GLFW, verá que en OSX durante init cambia explícitamente el directorio actual. Mira y desplazarse hacia abajo hasta alrededor de la línea 236 (o buscar chdir).

He encontrado su SO pregunta porque actualmente estoy tratando de entender por qué GLFW hace un chdir explícito durante init. Descubrí esto porque tengo un programa que funciona en todas las plataformas excepto OSX. En OSX no puede encontrar sus archivos de datos utilizando una ruta relativa. Mi solución temporal es para obtener el directorio actual cuando se inicia principales y restablecer el directorio actual después de inicializar GLFW.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top