未解决的外部符号__IMP__GLEWINIT vs __IMP__GLEWINIT@0
unresolved external symbol __imp__glewInit VS __imp__glewInit@0
当我在程序中使用openGL时,使用" glew":未解决的外部符号_ imp _gleWinit(使用glew 1.10时,我就会出现问题。0),当我用版本" glew 1.6.0"替换glew32.lib时,解决了此问题。但是,当我在.cpp文件中编译附加的简单代码时,链接步骤失败了错误:外部符号_ imp _glewinit@0。然后,我使用vs2008的dollsin.exe来检查glew32.lib在glew 1.6.0和glew 1.10.0中,事实证明,glew 1.6.0具有一个名为_glewinit的符号,而glew 1.10.0却_glewinit _glewinit@glewinit@0。
。 。所以我的问题是为什么这两个glew32.libs具有不同的符号名称?如果我想在GLEW 1.10.0中使用新功能,并且具有"未解决的外部符号_ imp _gleWinit",则解决该功能的最佳方法是什么?
#include "glew.h"
#include <GL/freeglut.h>
int main(int argc, char **argv){
glutInit( &argc, argv );
glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH );
glutCreateWindow("123");
GLenum err = glewInit();
return 0;
}
ps:我的所有测试均在Win7上,编译器为VS2008_SP1。
@0
是传递 0 bytes值的__stdcall
函数的名称装饰方案(换句话说,void
函数)。使用与您的库一起运送的适当标头,以便使用库已编译的调用惯例。在这种情况下,无论您是使用C还是C 链接(如注释中建议)都没有区别,因为__stdcall
调用约定始终在符号名称的开头添加下划线。
关于_imp_glewInit
,这完全是另一回事,因为那是DLL导入存根。最后,使用DLL版本的Glew几乎没有真正的好处。因此,我建议您使用静态链接版本:glew32s.lib
并定义GLEW_STATIC
,以使事情变得更容易。
要回答您的最后一个问题:GLEW中没有新功能可以通过放入新版本的DLL来使用,您的程序必须在您实际编写代码时就必须注意扩展名。如果没有利用新扩展之一的代码,那么将一无所获。这就是为什么GLEW的DLL版本没有提供特殊与静态库的原因。
- glewInit and building dll
- 失败的 glewInit:缺少 GL 版本
- 为什么数组与 std::extent 第二个 imp 匹配
- "Missing GL version" 从 glewInit() 使用 EGL?
- glewInit 从后台线程调用时失败
- glewinit()失败和OpenGL错误1282
- 未定义对glewInit()的引用@0
- 新的 OpenGL 项目 glewInit() 错误
- OpenGL: glGetError() 在调用 glewInit() 后返回无效的枚举
- OpenGL error GL_INVALID_ENUM (0x0500) while glewInit()
- glewInit() 和客户端程序中GLEW_ARB_xxx_失败
- glewInit() 失败与 "Missing GL version" , SDL2 OpenGL 上下文, cygwin 编译器
- glewInit未定义,但glewExperimental未定义
- glewInit() 返回错误:'1.5.2'
- glewInit()在创建osmesa(屏幕外台面)上下文后崩溃(segfault)