undefined reference to glut*WithExit之类的函数问题的原因及解决
来源:互联网 发布:王者荣耀女娲攻略知乎 编辑:程序博客网 时间:2024/06/06 02:37
从百度空间
undefined reference to glut*WithExit之类的函数问题的原因及解决
现象:
D:\CodeBlocks\MinGW\include\GL\freeglut_std.h|610|undefined reference to `__imp____glutInitWithExit@12'|
obj\Debug\main.o||In function `glutCreateWindow_ATEXIT_HACK':|
D:\CodeBlocks\MinGW\include\GL\freeglut_std.h|612|undefined reference to `__imp____glutCreateWindowWithExit@8'|
obj\Debug\main.o||In function `glutCreateMenu_ATEXIT_HACK':|
D:\CodeBlocks\MinGW\include\GL\freeglut_std.h|614|undefined reference to `__imp____glutCreateMenuWithExit@8'|
原理:
/* Comment from glut.h of classic GLUT:
Win32 has an annoying issue where there are multiple C run-time
libraries (CRTs). If the executable is linked with a different CRT
from the GLUT DLL, the GLUT DLL will not share the same CRT static
data seen by the executable. In particular, atexit callbacks registered
in the executable will not be called if GLUT calls its (different)
exit routine). GLUT is typically built with the
"/MD" option (the CRT with multithreading DLL support), but the Visual
C++ linker default is "/ML" (the single threaded CRT).
One workaround to this issue is requiring users to always link with
the same CRT as GLUT is compiled with. That requires users supply a
non-standard option. GLUT 3.7 has its own built-in workaround where
the executable's "exit" function pointer is covertly passed to GLUT.
GLUT then calls the executable's exit function pointer to ensure that
any "atexit" calls registered by the application are called if GLUT
needs to exit.
Note that the __glut*WithExit routines should NEVER be called directly.
To avoid the atexit workaround, #define GLUT_DISABLE_ATEXIT_HACK. */
理解:
大致的意思是:win32有一个让人恼火的地方:同时存在多个C runtime库(CRT)。而编译好的GLUT.dll可能会连接到和编译GLUT.dll时用到的CRT不同的CRT,这样就会出现一些数据、函数之类不被调用的现象,尤其是atexit回调函数。为了应对这个问题,GLUT做了一个权宜之计或成变通处理(WorkAround),内建了一个exit函数指针,GLUT需要退出时,就内部调用这个函数。
这些glut*exit函数不应该直接被用户调用。所以说如果你发现了连接的时候,连接到了,就#define GLUT_DISABLE_ATEXIT_HACK,禁用这个workaround就行了。
但是我还是有些不理解:为什么能连接到了呢?连接的那些exit函数难道没有被实现?
- undefined reference to glut*WithExit之类的函数问题的原因及解决
- undefined reference to `vtable for’”问题的原因及解决方法
- 解决undefined reference to `log' 的问题
- 解决undefined reference to `pthread_create'的问题
- QT出现“undefined reference to `vtable for’”问题的原因及解决方法
- QT出现“undefined reference to `vtable for’”问题的原因及解决方法【转】
- 关于"undefined reference to" 问题的原因和解决办法
- undefined reference to "XX "的原因分析
- 类似undefined reference to 'pthread_create'问题的解决
- 关于undefined reference to `WSASocketA@24'问题的解决
- 解决了code blocks 的undefined reference to 问题
- 线程库编译问题: undefined reference to 'pthread_create'的解决
- 解决undefined reference to `png_create_write_struct'等的问题
- undefined reference to `vtable for 问题的解决
- 解决undefined reference to `__fdelt_chk@GLIBC_2.15'的问题
- 解决Qtcreator下的"undefined reference to 'getaddrinfo@16'"问题
- gcc/mpicc 编译器 undefined reference to ... 问题的解决
- undefined reference 的原因
- eclipse下的tomcat内存设置大小
- 金融知识复习 2
- 算术右移 逻辑右移
- 金融知识复习 3
- 金融知识复习 4
- undefined reference to glut*WithExit之类的函数问题的原因及解决
- 金融知识复习 5
- 如何做好产品
- 金融知识复习 6
- yaf模板路径在模块中的问题及解决方法
- 金融知识复习 7
- Linux MTD层的研究(Nandflash)
- Robot到Rational Functional Tester和Performance Tester
- 开源java推荐系统Taste(1)-基本的Item-based推荐