OpenGL函数未定义OSX

时间:2014-07-13 18:17:25

标签: c++ macos opengl

我最近买了一台mac进行跨平台开发,我遇到了一些OpenGL问题。

使用未声明的标识符'glBindVertexArray'

我正在使用glfw(glfw3.h)和glew(glew.h),这就是我在代码中包含它的方式:

#ifdef WIN_32
#include <glew.h>
#endif
#ifdef __APPLE__
#include <gl/glew.h>
#endif

#define GLEW_STATIC

#define GLFW_INCLUDE_GLCOREARB

#include "glfw3.h"

为什么我得到这些未定义的标识符有任何明显的错误?

干杯!

2 个答案:

答案 0 :(得分:0)

在OS X上不需要GLEW。所有支持的OpenGL函数都在标准开发环境中包含的头文件中声明。如果您想查看哪些头文件及其包含的内容,请在此答案中解释头文件的确切位置:Where are the OpenGL header files located on MacOSX?。您通常不必担心路径名称,如果您使用<OpenGL/gl3.h>这样的名称包含它,编译器会自动找到正确的名称。

对于GLFW,您在问题中有正确的包含序列:

#define GLFW_INCLUDE_GLCOREARB
#include <GLFW/glfw3.h>

根据评论中的讨论,您遗漏的是,在您加入GLFW_INCLUDE_GLCOREARB之前,您需要<GLFW/glfw3.h>定义每次

当您开发跨平台代码时,每个包含OpenGL调用的源文件中的每个平台都需要条件包含是很麻烦的。让生活更轻松的简单方法是将系统依赖包含在单个标头中,然后在源文件中包含该标头。这隔离了系统依赖性,并使以后更容易添加平台。

例如,您可以定义一个名为gl_includes.h的标头,其中包含与系统相关的OpenGL包含,就像您在代码中一样:

#ifdef WIN32
#include ...
#endif

#ifdef ...
#include ...
#endif

然后,在所有源文件中,您只包含此标题:

#include "gl_includes.h"

答案 1 :(得分:0)

如果您使用的是CC=clang++,请在参数中添加-isysroot

示例,在我的makefile中:

CC=clang++
CFLAGS:= -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk