在 OSX 上链接 OpenGL 框架

Posted

技术标签:

【中文标题】在 OSX 上链接 OpenGL 框架【英文标题】:Linking OpenGL framework on OSX 【发布时间】:2015-06-16 08:10:54 【问题描述】:

我有一个运行 Yosemite 并支持 OpenGL 4.x 的 mac,但是每当我使用“-lSDL2 -framework OpenGL”标志编译 c++ 项目时,它会自动使用安装在 /System/Library/Frameworks 下的 OpenGL 1.20。正确的版本安装在 /Applications/XCode.app/... 的长路径中 有没有办法让 gcc 编译器正确选择 OpenGL 4.x 版本而不是旧版本?

编辑: 似乎哪个链接可能无关紧要,它仍然使用不正确的版本。当“SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);”行时,它似乎使用了正确的版本。被添加。但是它仍然说不支持 GLSL 版本 #130。所以这可能不是问题。

【问题讨论】:

按照forums.macrumors.com/threads/… 的建议,我发现添加 -F"path" -framework OpenGL 添加了明显正确的路径,但是尽管我的代码请求更新版本,但它仍会加载旧版本的 OpenGL: "SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 4);" 输出:=== OpenGL 实现 === 供应商:Intel Inc. GL 版本:4.1 INTEL-10.6.20 GL 版本(严格):4.1 GLSL 版本:4.10 错误:0:1:' ' : 不支持版本 '130' 错误: 0:2: '' : #version required and missing. 【参考方案1】:

您可以使用 -isysroot 选项来指定特定的 SDK 位置。例如:

clang -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk ...

这将告诉编译器使用此特定 SDK 版本中的所有头文件、库等。

【讨论】:

【参考方案2】:

我知道这个答案很晚,但它可能对其他人有所帮助,

SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);

此行仅指定正在使用的配置文件,您应该通过将主要和次要版本确定为下两行来明确使用 OpenGL。

SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3); // 确定你的 Maj 版本 SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2); // 确定你的 Min 版本

也在 GLSL 中使用:

#version 320 core // 通过放置 Major Minor 0 来使用您的版本而不是 320

如果您使用的是 GLFW,如果您在 MAC 中,请添加此行:

glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);

【讨论】:

以上是关于在 OSX 上链接 OpenGL 框架的主要内容,如果未能解决你的问题,请参考以下文章

如何使用cmake在mac上链接OpenGL相关库?

libpng 未在 Mac OSX 10.9.2 上链接

无法在 OSX 下编译 OpenGL 项目

当 OSX 不再支持 OpenGL 时,SDL 是不是仍会正式支持 OSX?

如何在 osx 上使用 waf 链接 opengl 和 glut?

OSX OpenGL 深度模板组合