Domanda

Sono in esecuzione un'applicazione GLFW (che ho scritto in C ++)

ho eseguito come segue:

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

Tuttavia, il mio codice non è in grado di leggere file in relazione-pathed correttamente.

Credo che ciò che sta accadendo è che questo Bundle Mac sta cambiando la mia directory corrente.

1) che cosa cambia a? 2) Posso controllare questo?

Grazie!

È stato utile?

Soluzione

Non fare alcuna ipotesi circa la directory di lavoro corrente quando viene lanciata l'applicazione. Il Finder è ragionevolmente coerente di questo, ma non è l'unico modo per lanciare un app. Quando il debug sotto Xcode per esempio la directory di lavoro iniziale sarà diverso, e ci sono vari altri metodi che possono o non possono impostare la directory di lavoro come previsto. Si consiglia di testare la vostra applicazione lanciandolo dalla riga di comando in una directory totalmente estranei -. Se trova ancora i suoi file in questa condizione allora sei in buona forma

Altri suggerimenti

Si può essere in grado di utilizzare questo pezzo di codice per scoprire l'ubicazione del 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; 

Spesso si tratta di directory home dell'utente. Non sono sicuro se questo è garantito, ma è possibile utilizzare chdir () all'interno di applicazioni Cocoa. A seconda delle esigenze, gli utenti possono avere una migliore esperienza se si utilizzano i segnalibri del filesystem (10.6+) o alias (in precedenza). O anche percorsi assoluti, che sono ancora robusti contro cambiare la directory di lavoro.

Se si guardano le fonti GLFW, vedrete che su OSX durante init cambia in modo esplicito la directory corrente. Guardate qui e scorrere verso il basso fino a circa la linea 236 (o cercare i chdir).

Ho trovato il vostro SO domanda perché sto attualmente cercando di capire perché GLFW fa un chdir esplicito durante init. Ho scoperto questo perché ho un programma che funziona su tutte le piattaforme tranne OSX. Su OSX non riesce a trovare i suoi file di dati utilizzando un percorso relativo. La mia soluzione temporanea è quello di ottenere la directory corrente quando si avvia principali e ripristinare la directory corrente dopo l'inizializzazione GLFW.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top