我用MinGW64它eclipse来编译一个FreeGLUT示例程序.我收到以下错误.
11:55:58 **** Incremental Build of configuration Debug for project OpenGL ****
Run Code Online (Sandbox Code Playgroud)
信息:内部构建器用于构建g ++"-ID:\ ...\3rdPartyLibraries\freeglut\include"" - ID:\ ...\3rdPartyLibraries\freeglut\lib\x64"-O0 -g3 -Wall -c - fmessage-length = 0 -std = c ++ 11 -o"src\LUtil.o""..\src\LUtil.cpp"g ++"-LD:\ ...\3rdPartyLibraries\freeglut\lib\x64" - o OpenGL.exe"src\cPoint.o""src\OpenGL.o""src\LUtil.o"-lglu32 -lfreeglut_static -lopengl32 -lwinmm -lgdi32 src\LUtil.o:在函数glutInit_ATEXIT_HACK':
D:/.../3rdPartyLibraries/freeglut/include/GL/freeglut_std.h:620: undefined reference toimp _glutInitWithExit'src\LUtil中. o:在函数glutCreateWindow_ATEXIT_HACK':
D:/.../3rdPartyLibraries/freeglut/include/GL/freeglut_std.h:622: undefined reference toimp _glutCreateWindowWithExit'src\LUtil.o中:在函数glutCreateMenu_ATEXIT_HACK':
D:/.../3rdPartyLibraries/freeglut/include/GL/freeglut_std.h:624: undefined reference toimp _glutCreateMenuWithExit'cols2.exe:error:ld返回1退出状态
所以我搜索了标题并发现freeglut_std.h:
/*来自经典GLUT的glut.h的评论:
Win32有一个恼人的问题,其中有多个C运行时库(CRT).如果可执行文件与GLUT DLL中的不同CRT链接,则GLUT DLL将不共享可执行文件看到的相同CRT静态数据.特别是,如果GLUT调用其(不同的)退出例程,则不会调用可执行文件中注册的atexit回调.GLUT通常使用"/ MD"选项(具有多线程DLL支持的CRT)构建,但Visual C++链接器默认为"/ ML"(单线程CRT).
此问题的一个解决方法是要求用户始终使用与编译GLUT相同的CRT进行链接.这要求用户提供非标准选项.GLUT …