Pergunta

Estou executando um aplicativo GLFW (que eu escrevi em C ++)

eu executá-lo da seguinte forma:

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

No entanto, o meu código não pode ler arquivos relativos-pathed corretamente.

Então eu acredito que o que está acontecendo é que este Mac Bundle está mudando meu diretório atual.

1) o que é que mudá-lo para? 2) eu posso controlar isso?

Obrigado!

Foi útil?

Solução

Nunca fazer suposições sobre o atual diretório de trabalho quando o seu aplicativo é lançado. O Finder é razoavelmente consistente sobre isso, mas não é a única maneira de lançar um aplicativo. Quando a depuração sob Xcode por exemplo a pasta de trabalho inicial irá ser diferente, e existem vários outros métodos que podem ou não podem definir o directório de trabalho conforme o esperado. Você deve testar seu aplicativo por iniciá-lo a partir da linha de comando em um diretório totalmente alheios -. Se ele ainda encontra seus arquivos sob essa condição, então você está em boa forma

Outras dicas

Você pode ser capaz de usar este pedaço de código para descobrir a localização do 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; 

Muitas vezes é o diretório home do usuário. Eu não tenho certeza se isso é garantido, mas você pode usar chdir () dentro aplicativos de cacau. Dependendo de suas necessidades, os usuários podem ter uma experiência melhor se você usar bookmarks sistema de arquivos (10.6+) ou aliases (mais cedo). Ou mesmo caminhos absolutos, que ainda são robustos contra mudando diretório de trabalho.

Se você olhar para as fontes GLFW, você verá que no OSX durante a inicialização muda explicitamente o diretório atual. Olhe aqui desloque-se para cerca de linha 236 (ou procurar chdir).

Eu encontrei sua pergunta SO porque eu estou atualmente tentando entender por que GLFW faz um chdir explícita durante a inicialização. Descobri isso porque eu tenho um programa que funciona em todas as plataformas, exceto OSX. No OSX não pode encontrá-lo de arquivos de dados usando um caminho relativo. Minha solução temporária é para obter o diretório atual quando principais partidas e redefinir o diretório atual após a inicialização GLFW.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top