C++ 在MacOSX.framework中包含GLEW的正确方法是什么?
可能是一个非常简单的问题,但它让我难倒了 我有一个基于SDL/OpenGL/GLEW的静态库,可以在Windows上编译(gcc/g++)和链接。在OSX上,同一个代码库未能编译,声称找不到GL_NUM_EXTENSIONS和::glGetStringi()的声明,这是因为我在混合中加入了GLEW(只有SDL和OpenGL,它在OSX上也能很好地构建)C++ 在MacOSX.framework中包含GLEW的正确方法是什么?,c++,macos,gcc,sdl,glew,C++,Macos,Gcc,Sdl,Glew,可能是一个非常简单的问题,但它让我难倒了 我有一个基于SDL/OpenGL/GLEW的静态库,可以在Windows上编译(gcc/g++)和链接。在OSX上,同一个代码库未能编译,声称找不到GL_NUM_EXTENSIONS和::glGetStringi()的声明,这是因为我在混合中加入了GLEW(只有SDL和OpenGL,它在OSX上也能很好地构建) //globals.h #包括 #包括 //图形.h #包括“globals.h” bool HasGLExtension(const char
//globals.h
#包括
#包括
//图形.h
#包括“globals.h”
bool HasGLExtension(const char*pName);
//graphics.cpp
#包括
#包括“graphics.cpp”
布尔HasGLExtension(常量字符*pName)
{
闪烁的numExtensions;
::glGetIntegerv(GL_NUM_扩展名和numExtensions);//错误
对于(int i=0;i
- 作为框架构建的依赖库位于/Library/frameworks
- 使用了-DGLEW_STATIC-DSDL_NO_GLEXT编译标志(在Windows上根据需要-即使删除它们,问题仍然存在)
- 即使自动完成也会确认glew.h的位置存在(当然,这不是我得到的错误,而是符号)
- 包含SDL/SDL_opengl.h只会导致声明冲突
- glew.h中存在问题的定义
我错过了什么?不要这样做。对于1,易于设置,2,开箱即用,3,在授权方面几乎没有障碍的东西,请使用。如果您包括
,为什么不使用std::string
?为什么不引用编译器给出的错误?此外,为什么要使用命名空间范围<代码>:GLGETSTRIGIGI/<代码> GLW C函数?@ Brett Hale:项目本身是C++库,我习惯于指示属于全局命名空间的东西。@ DAKNOKKYT:Hulf>这样做的缺点。openGL使用c字符串,由于我没有以编程方式复制、修改、创建字符串等等,所以我很乐意这样做。尽管这不是性能敏感的代码(不会在我的游戏循环中检查扩展…),但我更喜欢只在指针足够的地方复制指针,这也意味着不调用可能会或可能不会执行模糊操作的构造函数,例如分配内存。@iCE-9-那么编译器给出的错误是什么呢?-1er是否愿意解释他们遇到的问题,并可能提出改进建议?
// 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;
}