我运行一个应用程序GLFW(我在C写++)

我运行它如下所示:

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

然而,我的代码不能正确读取相对径处理的文件。

所以我相信这是怎么回事的是,这台Mac捆绑正在改变我的当前目录。

1)这是什么它更改为? 2)I,可以控制该?

谢谢!

有帮助吗?

解决方案

永远不要对当前工作目录做任何假设,当你的应用程序启动。 Finder即将此相当一致,但它是不启动应用的唯一途径。当的Xcode下调试例如初始工作目录将是不同的,并且有可能或可能不设置工作目录按预期各种其它方法。你应该在一个完全无关的目录,在命令行启动它测试您的应用程序 - 它是否仍然认为这个条件,那么你在良好的状态下是它的文件

其他提示

您可能能够使用此代码段以找出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; 

通常是用户的主目录。我不知道这是有保证的,但你可以使用Cocoa程序内的chdir()。根据您的要求,如果你使用的文件系统的书签(10.6或更高版本)或别名(前面)的用户可以有更好的体验。甚至是绝对路径,它仍然反对改变工作目录强劲。

如果你看一下GLFW来源,你会在初始化它明确地改变当前目录看到,OSX。 看这里和向下滚动至约236行(或搜索CHDIR)。

我发现你的SO问题,因为我正在试图理解为什么GLFW初始化过程中不明确的CHDIR。我发现这一点,因为我有一个程序,除上OSX所有平台的作品。在OSX使用相对路径它无法找到它的数据文件。我的临时解决办法,是当前目录时,主启动和初始化GLFW后重置当前目录。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top