Xcode无法找到或包含SDL2

k2fxgqgv  于 2023-05-08  发布在  其他
关注(0)|答案(2)|浏览(257)

我最近下载了SDL 2并正在尝试安装它。我创建了一个小的测试程序,由一个.cpp和一个.h文件组成。
我把SDL2.frameworks放在/Library/Frameworks里面,然后确保它被添加到General->Frameworks and Libraries,并尝试#include <SDL2/SDL.h>。文件未找到。
我确保转到构建设置->搜索路径->框架搜索路径来添加/库/框架(它已经列在设置旁边,但我将其重新添加到下拉列表中)。我还将/Library/Frameworks/SDL2.framework添加到Header Search Paths。文件未找到。
我尝试包括<SDL2/SDL.h>、<SDL/SDL.h>、<SDL.h>、“SDL2/SDL.h”、“SDL/SDL.h”和“SDL.h”。这些文件都没有找到。

gcuhipw9

gcuhipw91#

对于标头搜索路径,应该将其设置为FRAMEWORK_DIRCTORY/SDL2.framework/Headers/,或者您可以使用FRAMEWORK_DIRCTORY/SDL2.framework并打开recursive搜索。
那么你应该可以只使用#include <SDL.h>

编辑:

经过一些调查,似乎我最初的答案更像是一个解决方案。在代码中包含SDL库的正确方法应该是只使用#include <SDL2/SDL.h>,但它不起作用。
原因是在编译代码时,Xcode会尝试将库复制到产品文件夹,以便编译后的可执行文件可以轻松访问它。然而,出于某种原因,Xcode复制了框架,没有header文件夹(原因可能是Xcode正在转向只使用Swift,它没有真正的“header”)。
默认情况下,当您尝试运行代码时,如果它看到product文件夹中有一个SDL2.framework文件夹,它将使用该框架,即使其中没有header文件夹。但由于它实际上没有头文件夹,它实际上并不运行。
要解决它,最简单的方法是将其从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,以获得更好的跨设备可用性。

lsmepo6l

lsmepo6l2#

SDL2_ttf框架有一些非常奇怪的地方。虽然这不是“正确”的方法,但我发现只要#包含头的绝对路径,使用默认的XCode设置一切都很好:

include“/Library/Frameworks/SDL2_ttf.framework/Headers/SDL_ttf.h”

在我的情况下,图书馆工作得很好。这可能证实了头不被复制到本地Frameworks目录的想法。

相关问题