【发布时间】:2014-08-28 10:34:18
【问题描述】:
首先,我知道这个问题已经被问过很多很多次了;我已经阅读了至少五到十个变体,但给出的答案都没有在我的案例中起作用。我有电话:
helloWorld = SDL_LoadBMP("helloworld.bmp");
在我的 Xcode 5 项目的 main.cpp 文件中。目录结构如下:
TestProject1
main.cpp
Resources
helloworld.bmp
TestProject1.1
TestProject1.xcodeproj
当然,我尝试了不同的路径,即Resources/helloworld.bmp,是的,Resources文件夹被导入到项目中。但是,该语句返回 NULL,因为(根据 SDL_Error)它找不到该文件。现在,这行:
helloWorld = SDL_LoadBMP("/fully/qualified/path/to/helloworld.bmp");
工作正常,所以我的代码没有问题。让 Xcode 与资源的相对路径一起工作的普遍接受的方法是什么?当我制作一个更大的项目时,我正在寻找一种可移植的方法(到 SDL 支持的平台,ofc 在不同的计算机/设备上),并且如果 Xcode 无法制作可移植的 C++ 项目,我愿意使用不同的 IDE。阅读其他问题后我尝试过的其他其他事情:
将helloworld.bmp 添加到构建阶段> 复制文件。
添加代码:
// ----------------------------------------------------------------------------
// This makes relative paths work in C++ in Xcode by changing directory to the Resources folder inside the .app bundle
#ifdef __APPLE__
CFBundleRef mainBundle = CFBundleGetMainBundle();
CFURLRef resourcesURL = CFBundleCopyResourcesDirectoryURL(mainBundle);
char path[PATH_MAX];
if (!CFURLGetFileSystemRepresentation(resourcesURL, TRUE, (UInt8 *)path, PATH_MAX))
{
// error!
}
CFRelease(resourcesURL);
chdir(path);
std::cout << "Current Path: " << path << std::endl;
#endif
// ----------------------------------------------------------------------------
到main.cpp 的开头(在if (!CFURL...) 行返回“Expected unqualified-id”编译器错误)。
使用绝对路径 - 正如我所说,这可行,但我想要可移植性。
调用getcwd:这是 C++ 代码。我在这里缺少什么吗? getcwd 似乎不是 C++ 函数。
【问题讨论】:
标签: c++ xcode relative-path portability sdl-2