可能是一个非常简单的问题,但它让我难住了。
我有一个基于 SDL/OpenGL/GLEW 的静态库,可以在 Windows 上编译 (gcc/g++) 和链接。在 OS X 上,相同的代码库无法编译,声称它找不到 GL_NUM_EXTENSIONS 和 ::glGetStringi() 的声明 - 这是因为我在混合中加入了 GLEW(只有 SDL 和 OpenGL,它构建得很好OS X 也是)。
// globals.h
#include <glew.h>
#include <SDL/SDL.h>
// graphics.h
#include "globals.h"
bool HasGLExtension(const char* pName);
// graphics.cpp
#include <string>
#include "graphics.cpp"
bool HasGLExtension(const char* pName)
{
GLint numExtensions;
::glGetIntegerv(GL_NUM_EXTENSIONS, &numExtensions); // error
for (int i = 0; i < numExtensions; ++i)
{
if (strcmp(pName, (char*)::glGetStringi(GL_EXTENSIONS, i)) == 0) // error
{
return true;
}
}
return false;
}
- 作为框架构建的依赖库位于/Library/Frameworks。
- 使用了 -DGLEW_STATIC -DSDL_NO_GLEXT 编译标志(在 Windows 上需要 - 即使我删除它们,问题仍然存在)。
- 甚至自动完成确认 glew.h 的位置存在(当然,这不是我得到的错误——它是符号)。
- 包括 SDL/SDL_opengl.h 只会导致声明冲突。
- glew.h 中存在有问题的定义
我缺少什么明显的东西?