我最近下载了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”。这些文件都没有找到。
2条答案
按热度按时间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
,以获得更好的跨设备可用性。lsmepo6l2#
SDL2_ttf框架有一些非常奇怪的地方。虽然这不是“正确”的方法,但我发现只要#包含头的绝对路径,使用默认的XCode设置一切都很好:
include“/Library/Frameworks/SDL2_ttf.framework/Headers/SDL_ttf.h”
在我的情况下,图书馆工作得很好。这可能证实了头不被复制到本地Frameworks目录的想法。