1. Q:
error LNK2019: 无法解析的外部符号 ___glutCreateWindowWithExit@8 ,该符号在函数 _glutCreateWindow_ATEXIT_HACK@4 中被引用
error LNK2019: 无法解析的外部符号 ___glutInitWithExit@12 ,该符号在函数 _glutInit_ATEXIT_HACK@8 中被引用
fatal error LNK1120: 2 个无法解析的外部命令
A:
glut.h的注释 Note that the __glut*WithExit routines should NEVER be called directly. To avoid the atexit workaround, #define GLUT_DISABLE_ATEXIT_HACK.
在#include <GL/glut.h>前面加上了一句: #define GLUT_DISABLE_ATEXIT_HACK 即可
2. Q:
在运行《OpenGL编程指南(第五版)》中文版blendeqn.c时,遇到错误:
e:\OpenGL\OpenglMyself\OpenGL\06_01_Blendeqn\Blendeqn.cpp(62): error C2065: “GL_FUNC_ADD” : 未声明的标识符
A:
出错原因是:glBlendEquation是OpenGL扩展部分的函数。解决方法是安装OpenGL的glew扩展库。
首先下载glew库:http://glew.sourceforge.net/
然后进行安装:
拷贝glew32.dll至system32文件夹下,拷贝glew32.lib至VC目录下lib文件夹,拷贝glew.h和wglew.h至VC目录下include/GL目录下。
在程序开始要导入头文件:#include <GL/glew.h>。
其次还要导入库文件glew32.lib 查看 http://blog.youkuaiyun.com/xiajun07061225/article/details/6938740
3. Q:
error C2381: “exit” : 重定义;__declspec(noreturn) 不同
A: 一、
#if defined(_WIN32)
# ifndef GLUT_BUILDING_LIB
extern _CRTIMP void __cdecl exit(int);
上面是glut.h中对exit的使用,意思是如果没有定义宏GLUT_BUILDING_LIB,就使用它的exit,那我们就在项目的属性——预处理器 里定义这个宏,这样就不执行glut.h中的exit了,而只执行stdlib.h中的exit。这样也就不会冲突了。对了,还要在附加依赖项里手动加上glut32.lib glu32.lib opengl32.lib,因为我们定义了宏GLUT_BUILDING_LIB,glut.h文件就不会为我们自动生成这三个附加依赖项了。
二、
stdlib.h(406) : error C2381: “exit”: 重定义;__declspec(noreturn) 不同
glut.h(146) : 参见“exit”的声明
解决方法:#include <GL/glut.h>
#include <stdlib.h>
改成:
#include <stdlib.h>
#include <GL/glut.h>
通过。
OpenGL和C++有不太融合的地方,在include时要让标准C++类库的头文件位于GLUT图形库头文件之前。