【问题标题】:Using homebrew installed SDL2 with Xcode使用自制软件安装 SDL2 和 Xcode
【发布时间】:2015-03-16 23:08:44
【问题描述】:

我已经使用 Homebrew 安装了 SDL2,但现在我不知道如何确保 Xcode 可以使用它!我导入了创建的库并将其添加到我的项目的构建阶段选项卡中。但是当我尝试构建时,我得到了错误'SDL2/SDL.h' not found

【问题讨论】:

    标签: homebrew sdl-2


    【解决方案1】:

    为了能够在 Xcode 上使用 SDL2,您必须设置两件事(通常是 SDL 所必需的):

    • 在哪里可以找到头文件(以便 Clang 可以使用 -Iheader/path 编译)
    • 在哪里可以找到 .dylib 以将其链接到项目(因为使用 brew,您没有真正的 .framework

    要知道正确的路径,您应该调用sdl2-config --cflagssdl2-config --libs。在我的系统上,这些产生:

    :~jack$ /usr/local/bin/sdl2-config --cflags
    -I/usr/local/include/SDL2 -I/usr/X11R6/include -D_THREAD_SAFE
    
    :~jack$ /usr/local/bin/sdl2-config --libs
    -L/usr/local/lib -lSDL2
    

    现在只需将第一个粘贴到您项目的other C flags 和另一个粘贴到other linker flags 字段中,您就可以开始了。

    您可以在正确的字段中设置它们,Header Search Paths 对应于-ILibrary Search Path 对应于-l,但结果将是相同的。

    【讨论】:

    • 抱歉,实在是太忙了没能回复!感谢您回答几个问题,尽管当我将路径添加到其他 C 标志和其他链接器标志时,我可以访问 SDL,但它不像 #include <SDL2/SDL.h> 那样嵌套我如何确保它有效?如果我想以正确的方式进行操作,我应该将哪些路径放入标题搜索路径和库搜索路径中?因为我尝试过这样做,但还没有让它发挥作用。
    • 哦,我如何让它与 SDL_ttf 一起使用?因为找不到! SDL2/SDL.h 的嵌套和使用正确的字段虽然谢谢!
    • 好吧,没关系,我只是犯了一些错误,抱歉!感谢您的回答!
    • 附注一下,如果你只将 header 和 lib 目录添加到项目的 Headr Search PathsLibrary Search Paths,你会分别得到错误,因为为了 Xcode 使用这些库,您需要告诉 Xcode,例如使用 -lSDL2 库,所以我建议您使用上述答案提供的第一种方法。
    【解决方案2】:
    1. https://brew.sh安装安装的自制软件

    2. 在终端输入brew install sdl2

    3. 然后显示框架的路径(在xCode中选择项目文件>>构建设置>>头文件搜索路径)并使用cmd+shift+g输入/usr/local/include

    4. 在“通用”“框架和库”中放入 libSDL2-2.0.0.dylib(此处为 /usr/local/Cellar/sdl2/2.0.14_1/lib)

    5. 最重要的检查“签名和功能”中的“禁用库验证”

    在这些步骤之后,代码开始为我工作。

    【讨论】:

    • 不要重复你的答案。如果您(或其他人)决定稍后更新/修改它,您将不得不重新审视一个。我建议发布一次,然后在另一个问题的 cmets 中发布链接。
    【解决方案3】:
    1. brew search sdl2

    2. brew install sdl2 sdl2_image sdl2_mixer sdl2_net sdl2_ttf

    3. config xcode Build Settings --> All --> Search Paths --> Header Serch Paths
      --> /usr/local/include

    4. 配置 Xcode 常规 -> 添加框架和库 --> libSDL2-2.0.0.dylib

    5. 测试你的代码

    #include <iostream>
    #include <SDL2/SDL.h>
    #include <SDL2/SDL_image.h>
    
    using namespace std;
    
    int main() {
    
        if(SDL_Init(SDL_INIT_VIDEO) < 0) {
            cout << "SDL init failed." << endl;
            return 1;
        }
    
        cout << "SDL Init succeeded." << endl;
    
        SDL_Quit();
    
        return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 2015-11-18
      • 2021-12-13
      • 1970-01-01
      • 1970-01-01
      • 2021-04-15
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多