【问题标题】:Xcode can't find or include SDL2Xcode 找不到或包含 SDL2
【发布时间】:2021-05-19 16:12:44
【问题描述】:

我最近下载了 SDL2 并正在尝试安装它。我创建了一个由 .cpp 和 .h 文件组成的小型测试程序。

我已将 SDL2.frameworks 放入 /Library/Frameworks 中,然后确保将其添加到 General->Frameworks and Libraries 并尝试 #include 。找不到文件。

我确保转到构建设置->搜索路径->框架搜索路径以添加 /Library/Frameworks(它已经列在设置旁边,但我将它读到下拉列表中)。我还将 /Library/Frameworks/SDL2.framework 添加到标题搜索路径中。找不到文件。

我尝试包含 、“SDL2/SDL.h”、“SDL/SDL.h”和“SDL.h” .没有找到这些文件。

【问题讨论】:

标签: c++ xcode header-files sdl-2 library-path


【解决方案1】:

对于header搜索路径,应该设置为FRAMEWORK_DIRCTORY/SDL2.framework/Headers/,也可以使用FRAMEWORK_DIRCTORY/SDL2.framework并开启recursive搜索。

那么你应该可以只用#include <SDL.h> 来使用它。


编辑:

经过一番调查,我原来的答案似乎更像是一种解决方法。在您的代码中包含 SDL 库的正确方法应该是仅使用 #include <SDL2/SDL.h>,但它不起作用。

原因是在编译代码时,Xcode 会尝试将库复制到产品文件夹,以便编译后的可执行文件可以轻松访问它。然而,由于某种原因,Xcode 复制了框架,但没有标头文件夹(原因可能是 Xcode 正在转向仅使用 Swift,它实际上并没有“标头”的东西)。

默认情况下,当您尝试运行代码时,它会看到位于产品文件夹中的SDL2.framework 文件夹,它会使用该框架,即使它没有位于其中的头文件夹。但由于它实际上并没有头文件夹,它实际上并没有运行。


要解决它,最简单的方法是将其从Targets/Build Phases/Embed Frameworks 中删除。

默认情况下,当您向项目添加框架时,它也会被添加到此处。通过从Embed Frameworks 中删除它,它不会将框架复制到产品文件夹。它只会尝试从您在Build Settings/Framework Search Path 中输入的任何内容中搜索 SDL 框架。

同时,您不需要为Build Settings/Header Search Path 提供任何内容,因为它会首先在您的框架中查找Headers 文件夹。

有了你的代码,你可以使用#include <SDL2/SDL.h>


更好的是,您可以将框架添加到Build Phases/Copy Files,并将Destination 设置为Frameworks,清空Subpath,并可能取消选中Copy only when installing,以获得更好的跨设备可用性。

【讨论】:

  • @slitbodmod 我刚刚对答案做了一些长时间的编辑。我原来的那个更像是一种解决方法。新的解决它更正确。让我知道这是否有效,如果您喜欢,请接受答案:D
  • 啊,谢谢,之前的回答一直有效,直到我安装了 SDL_ttf 扩展。我做了你在编辑中所说的,它似乎构建好了,但现在它抛出了一个代码签名错误:|
  • @slitbodmod SDL_ttf 应该与 SDL 类似,您可以将其从嵌入框架中删除,并在代码中使用 #include <SDL2_ttf/SDL_ttf.h>。它可能会显示它不是由安全来源或其他东西发布的错误,您可以在System Preference/Security/General/Allow apps/Allow anyways 中允许它。
  • 我刚刚取消选中所有库的复制框上的代码签名,这似乎有效
猜你喜欢
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
  • 2016-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-28
  • 2023-04-05
相关资源
最近更新 更多