2016-03-18 115 views
-3

我想学习使用着色器,因此在Netbeans(ver。8.0.2)上创建了一个新的C++项目。OpenGL GLFW/GLEW编程

我想包括GLFW和GLEW库就像在本教程中指出:http://www.learnopengl.com/#!Getting-started/Creating-a-window

我目前struggeling在正常进口GLEW。当使用#include <GL/glew.h>时,编译器(我在Windows10x64/Cygwin控制台上使用GNU g ++)会引发大量错误。这似乎是glu.h的问题。为了测试的目的,我去掉了glew.h中的glu.h。这消除了错误,但也阻止了openGL完全加载(以gl开头的函数“未定义”,如glViewport)。所以这不可能是解决方案。

输出呼吁正常glew.h编译时,我得到:

g++ -m64 -c -g -Wall -I/cygdrive/C/Users/Erik/programming/Libraries/glew-1.13.0-win32/glew-1.13.0/include/ -I/cygdrive/C/Users/Erik/programming/Libraries/glfw-3.1.2.bin.WIN32/glfw-3.1.2.bin.WIN32/include/ -std=c++11 -MMD -MP -MF "build/Debug/Cygwin-Windows/startup.o.d" -o build/Debug/Cygwin-Windows/startup.o startup.cc 

In file included from /cygdrive/C/Users/Erik/programming/Libraries/glew-1.13.0-win32/glew-1.13.0/include/GL/glew.h:1202:0, 
       from startup.cc:5: 
/usr/include/w32api/GL/glu.h:68:79: error: expected ')' before '*' token 
void APIENTRY gluQuadricCallback(GLUquadric *qobj,GLenum which,void (CALLBACK *fn)()); 
                      ^
/usr/include/w32api/GL/glu.h:68:79: error: expected ')' before '*' token 
/usr/include/w32api/GL/glu.h:68:79: error: expected initializer before '*' token 
/usr/include/w32api/GL/glu.h:78:79: error: expected ')' before '*' token 
void APIENTRY gluTessCallback(GLUtesselator *tess,GLenum which,void (CALLBACK *fn)()); 
                      ^
/usr/include/w32api/GL/glu.h:78:79: error: expected ')' before '*' token 
/usr/include/w32api/GL/glu.h:78:79: error: expected initializer before '*' token 
/usr/include/w32api/GL/glu.h:94:75: error: expected ')' before '*' token 
void APIENTRY gluNurbsCallback(GLUnurbs *nobj,GLenum which,void (CALLBACK *fn)()); 
                     ^
/usr/include/w32api/GL/glu.h:94:75: error: expected ')' before '*' token 
/usr/include/w32api/GL/glu.h:94:75: error: expected initializer before '*' token 
/usr/include/w32api/GL/glu.h:96:24: error: expected ')' before '*' token 
typedef void (CALLBACK *GLUquadricErrorProc)(GLenum); 
         ^
/usr/include/w32api/GL/glu.h:97:24: error: expected ')' before '*' token 
typedef void (CALLBACK *GLUtessBeginProc)(GLenum); 
         ^
/usr/include/w32api/GL/glu.h:98:24: error: expected ')' before '*' token 
typedef void (CALLBACK *GLUtessEdgeFlagProc) (GLboolean); 
         ^
/usr/include/w32api/GL/glu.h:99:24: error: expected ')' before '*' token 
typedef void (CALLBACK *GLUtessVertexProc)(void *); 
         ^
/usr/include/w32api/GL/glu.h:100:24: error: expected ')' before '*' token 
typedef void (CALLBACK *GLUtessEndProc)(void); 
         ^
/usr/include/w32api/GL/glu.h:101:24: error: expected ')' before '*' token 
typedef void (CALLBACK *GLUtessErrorProc)(GLenum); 
         ^
/usr/include/w32api/GL/glu.h:102:24: error: expected ')' before '*' token 
typedef void (CALLBACK *GLUtessCombineProc)(GLdouble[3],void*[4],GLfloat[4],void**); 
         ^
/usr/include/w32api/GL/glu.h:103:24: error: expected ')' before '*' token 
typedef void (CALLBACK *GLUtessBeginDataProc)(GLenum,void *); 
         ^
/usr/include/w32api/GL/glu.h:104:24: error: expected ')' before '*' token 
typedef void (CALLBACK *GLUtessEdgeFlagDataProc) (GLboolean,void *); 
         ^
/usr/include/w32api/GL/glu.h:105:24: error: expected ')' before '*' token 
typedef void (CALLBACK *GLUtessVertexDataProc)(void *,void *); 
         ^
/usr/include/w32api/GL/glu.h:106:24: error: expected ')' before '*' token 
typedef void (CALLBACK *GLUtessEndDataProc)(void *); 
         ^
/usr/include/w32api/GL/glu.h:107:24: error: expected ')' before '*' token 
typedef void (CALLBACK *GLUtessErrorDataProc)(GLenum,void *); 
         ^
/usr/include/w32api/GL/glu.h:108:24: error: expected ')' before '*' token 
typedef void (CALLBACK *GLUtessCombineDataProc)(GLdouble[3],void*[4],GLfloat[4],void**,void*); 
         ^
/usr/include/w32api/GL/glu.h:109:24: error: expected ')' before '*' token 
typedef void (CALLBACK *GLUnurbsErrorProc)(GLenum); 
         ^

对我来说,(我是用C无亲++,因此不会在解释错误消息非常好)好像CALLBACK尚未定义。任何想法如何解决这个问题?

+0

没有语言的C/C++。只有两种不同的**语言C和C++。选择你实际使用的那个! – Olaf

+0

不要只使用链接。一个问题需要自成一体。学习[问]。 – Olaf

+0

你能展示一个代码无法编译的最小例子吗? – Louen

回答

0

我解决它以某种方式(不漂亮,但至少以某种方式):

我试图导入windef.hlink from @Louen说明。 这删除了CALLBACK-Error,但创建了一个新的(关于APIENTRY的东西)。所以,我搜索了WINDEF.H的错误,解决一部分,并发现它:

#ifndef CALLBACK 
#if defined(_ARM_) 
#define CALLBACK 
#else 
#define CALLBACK __stdcall 
#endif 
#endif 

然后我就粘贴这在我的文件(而不是包括全WINDEF.H)。