我已经构建了一个opengl程序,我的glu和gl头文件默认包含在windows 7专业版中。现在,我买了一本描述OpenGL游戏开发的书。本书的作者说,我必须将glew标题包含在我的项目中。在我完成此操作后,我得到了一些未解决的外部符号错误。
所以,现在我真的很困惑。 我之前在我的程序中使用了glBegin和glEnd语句。现在我要使用glBindBuffers和glGenBuffer等,但我得到了未解决的外部符号错误,如:
1>cWindows.obj : error LNK2001: unresolved external symbol __imp___glewBindBuffer
1>cMdlLoader.obj : error LNK2001: unresolved external symbol __imp___glewBindBuffer
1>cMdlLoader.obj : error LNK2001: unresolved external symbol __imp___glewBufferData
1>cMdlLoader.obj : error LNK2001: unresolved external symbol __imp___glewGenBuffers
这里的任何人都可以解释这个头文件与我使用它之间的区别吗?
我愣了很多时间,但在不同的网站上有更多令人困惑的词,比如“欢乐合唱团”或“过剩”。
答案 0 :(得分:43)
你在这里混合了三件不同的东西:
GLEW和GLU是完全不同的东西,你不能替换另一个。
GL/gl.h
是基本的OpenGL标题,它为您提供OpenGL-1.1函数和标记声明,任何可能更多。对于超出1.1版的任何内容,您必须使用OpenGL扩展机制。由于这是一项枯燥乏味的任务,因此GLEW项目实现了自动化,该项目提供了一个易于使用的库中包含的所有脏信息。该库的声明可在头文件GL/glew.h
中找到。由于OpenGL扩展在没有基本OpenGL的情况下没有意义,因此GLEW标头隐式包含常规OpenGL标头,因此包含GL/glew.h
时您不再需要包含GL/gl.h
。
然后是GLU,一组便利方法,BTW严重过时,不应该在任何现代OpenGL程序中使用。没有现代化的GLU,所以请忘记它。无论如何,它的声明是由标题GL/glu.h
(你要问的那个)提供的。
您获得的错误与包含文件无关。那些是链接器错误。仅包括声明只是工作的一半。另一半是链接实际的定义,而那些不在库文件的标题中; Windows上的* nix操作系统libglew.so
或libglew.a
或glew.lib
或glew32.lib
上的glews.lib
或glew32s.lib
。如果不使用静态版本(那些没有's'的版本),你也必须安装正确的DLL。
因此,要使用GLEW,您需要包含标题和将其添加到链接器选项中的库列表中。此外,一旦在程序中获得了OpenGL上下文,就必须调用glewInit();
。
答案 1 :(得分:22)
我对OpenGL很新,所以如果我错了请纠正我。