【问题标题】:Xcode Included Files Path ConfusionXcode 包含的文件路径混淆
【发布时间】:2013-12-17 03:14:04
【问题描述】:

我在 Xcode 5 中编写一个小 C++ 程序是为了好玩,但这是我第一次使用 Xcode,我对 Xcode 在打开项目中包含的文件时如何处理路径感到困惑。我正在使用 SDL2_image 框架,当我想加载我已包含在项目中的图像时,我只是这样做,它发现图像很好:

IMG_LoadTexture(renderer, "image_name.png");

但是,这似乎在其他任何地方都不起作用。我正在尝试使用 libxml2 加载一个 xml 文件,但是这段代码:

xmlDocPtr doc = xmlParseFile("doc_name.xml");

结果如下:

I/O warning : failed to load external entity "doc_name.xml"

当我尝试其他加载文件的方法时,也会发生类似的事情。我不确定这是因为 SDL2_Image 框架正在做一些特别的事情,还是因为我对事情的工作方式有一些其他的基本误解。所有文件都应该以相同的方式包含在内,我只需右键单击项目并选择“将文件添加到...”。编译后,它们会显示在应用程序的“内容/资源”文件夹中。我在stackoverflow上看到了关于如何打开捆绑包中的文件的其他问题(我假设它是内容文件夹?),但我很困惑为什么我不必做这些答案建议的任何事情来使它工作与 SDL_Image 的东西。

非常感谢您对此提供的任何帮助。到目前为止,我已经用我不理解的来自互联网的神奇构建设置解决了我的所有问题,所以任何解释都表明我如何自己解决这个问题,以便下次我可以非常感激。

[更新] 如果我使用路径“Application_Name.app/Contents/Resources/file_name”,我可以访问该文件。但是我不明白为什么我必须对除 SDL2_Image 库之外的所有内容都执行此操作,并且我不希望我的路径依赖于应用程序的名称。

【问题讨论】:

    标签: xcode path bundle libxml2 sdl-image


    【解决方案1】:

    选项 1) 我认为这里的问题不在于 C++ 代码,而在于文件位置。 在 XCode 中,二进制程序构建在 Executables 文件位置。您必须设置构建阶段以通过“复制捆绑资源”将输入文件复制到可执行文件位置。见Apple's Documentation

    选项 2) 或者,您可以使用硬编码路径并创建一个在 bash 中快速完成的安装程序,并且可以在每个阶段在 XCode 方案编辑器中轻松实现脚本运行。

    选项 3) 像这样使用 CoreFoundation 和编译器宏:Relative Paths Not Working in Xcode C++

    【讨论】:

    • 谢谢——不幸的是,默认情况下已经有一个 Copy Bundle Resources 构建阶段,其中包含我尝试访问的所有文件,如果是这种情况,我根本不需要更改它我应该吗?
    • 如果它工作,一切都很好,正如我解释的可执行文件的位置是关键,或者你可以使用硬编码路径并创建一个在 bash 中快速完成的安装程序,并且脚本运行可以每个阶段都可以在 XCode 方案编辑器中轻松实现。
    • 它的工作原理是将文件放在已编译应用程序的 Contents->Resources 文件夹中,但我的代码仍然找不到该文件。
    • 我在底部添加了一些更多信息来更新我的问题
    • 用CoreFoundation修正了编译器宏的答案
    猜你喜欢
    • 1970-01-01
    • 2018-08-25
    • 2013-03-21
    • 2012-03-25
    • 1970-01-01
    • 2010-11-20
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多