1

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

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

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

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

4

1 回答 1

1

对于头部搜索路径,应该设置为FRAMEWORK_DIRCTORY/SDL2.framework/Headers/,或者你可以使用FRAMEWORK_DIRCTORY/SDL2.framework并打开recursive搜索。

然后你应该能够使用它#include <SDL.h>


编辑:

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

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

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


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

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

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

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


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

于 2021-02-16T23:33:47.250 回答