C++ 将Qt4移植到Qt5,为OpenGL调用获取未解析的外部符号

C++ 将Qt4移植到Qt5,为OpenGL调用获取未解析的外部符号,c++,visual-studio-2010,opengl,qt5,unresolved-external,C++,Visual Studio 2010,Opengl,Qt5,Unresolved External,这是在VisualStudio2010中。我找不到任何说明哪个库包含这些函数的文档。我已经将这些库列为依赖项: Qt5OpenGL.lib;Qt5Gui.lib;Qt5Widgets.lib;qtmaind.lib;Qt5Cored.lib;Qt5Guid.lib;Qt5OpenGLd.lib;Qt5Sqld.lib;Qt5Networkd.lib;opengl32.lib;glu32.lib 我很感激这里的任何帮助,因为我被困住了 1>videograph_opengld.li

这是在VisualStudio2010中。我找不到任何说明哪个库包含这些函数的文档。我已经将这些库列为依赖项:

    Qt5OpenGL.lib;Qt5Gui.lib;Qt5Widgets.lib;qtmaind.lib;Qt5Cored.lib;Qt5Guid.lib;Qt5OpenGLd.lib;Qt5Sqld.lib;Qt5Networkd.lib;opengl32.lib;glu32.lib
我很感激这里的任何帮助,因为我被困住了

1>videograph_opengld.lib(videorenderer.obj) : error LNK2001: unresolved external symbol _glDeleteProgramsARB@8
1>videograph_opengld.lib(videorenderer.obj) : error LNK2001: unresolved external symbol _glDeleteShader@4
1>videograph_opengld.lib(videorenderer.obj) : error LNK2001: unresolved external symbol _glDeleteProgram@4
1>videograph_opengld.lib(videorenderer.obj) : error LNK2001: unresolved external symbol _glDetachShader@8
1>videograph_opengld.lib(videorenderer.obj) : error LNK2001: unresolved external symbol _glDeleteBuffersARB@8
1>videograph_opengld.lib(videorenderer.obj) : error LNK2001: unresolved external symbol _glUnmapBufferARB@4
1>videograph_opengld.lib(videorenderer.obj) : error LNK2001: unresolved external symbol _glBindBufferARB@8
1>videograph_opengld.lib(videorenderer.obj) : error LNK2001: unresolved external symbol _glMapBufferARB@8
1>videograph_opengld.lib(videorenderer.obj) : error LNK2001: unresolved external symbol _glActiveTexture@4
1>videograph_opengld.lib(videorenderer.obj) : error LNK2001: unresolved external symbol _glUseProgram@4
1>videograph_opengld.lib(videorenderer.obj) : error LNK2001: unresolved external symbol _glProgramLocalParameter4fARB@24
1>videograph_opengld.lib(videorenderer.obj) : error LNK2001: unresolved external symbol _glUniform4f@20
1>videograph_opengld.lib(videorenderer.obj) : error LNK2001: unresolved external symbol _glGetUniformLocation@8
1>videograph_opengld.lib(videorenderer.obj) : error LNK2001: unresolved external symbol _glUniform1i@8
1>videograph_opengld.lib(videorenderer.obj) : error LNK2001: unresolved external symbol _glLinkProgram@4
1>videograph_opengld.lib(videorenderer.obj) : error LNK2001: unresolved external symbol _glAttachShader@8
1>videograph_opengld.lib(videorenderer.obj) : error LNK2001: unresolved external symbol _glCreateProgram@0
1>videograph_opengld.lib(videorenderer.obj) : error LNK2001: unresolved external symbol _glCompileShader@4
1>videograph_opengld.lib(videorenderer.obj) : error LNK2001: unresolved external symbol _glShaderSource@16
1>videograph_opengld.lib(videorenderer.obj) : error LNK2001: unresolved external symbol _glCreateShader@4
1>videograph_opengld.lib(videorenderer.obj) : error LNK2001: unresolved external symbol _glGetShaderInfoLog@16
1>videograph_opengld.lib(videorenderer.obj) : error LNK2001: unresolved external symbol _glGetShaderiv@12
1>videograph_opengld.lib(videorenderer.obj) : error LNK2001: unresolved external symbol _glGetProgramInfoLog@16
1>videograph_opengld.lib(videorenderer.obj) : error LNK2001: unresolved external symbol _glGetProgramiv@12
1>videograph_opengld.lib(videorenderer.obj) : error LNK2001: unresolved external symbol _glProgramStringARB@16
1>videograph_opengld.lib(videorenderer.obj) : error LNK2001: unresolved external symbol _glBindProgramARB@8
1>videograph_opengld.lib(videorenderer.obj) : error LNK2001: unresolved external symbol _glGenProgramsARB@8
1>videograph_opengld.lib(videorenderer.obj) : error LNK2001: unresolved external symbol _glBufferDataARB@16
1>videograph_opengld.lib(videorenderer.obj) : error LNK2001: unresolved external symbol _glGenBuffersARB@8

您可能缺少一些其他关键依赖项,请打开属性->链接器->输入,然后将其他依赖项设置为

  • opengl32.lib
  • glu32.lib
  • delayimp.lib
  • imm32.lib
  • winmm.lib

另外,无论您当前拥有什么,im使用的参考可能是有日期的,但是您可以找到它

您的链接器报告丢失的符号实际上不包含在您可以在Windows中链接到的任何库中。它们是现代OpenGL配置文件和扩展函数,需要在创建OpenGL上下文后在运行时加载

如果你得到了那些符号丢失的报告,这表明在构建你正在使用的
视频图像
库时,有些东西被严重弄乱了;或者该库的作者不太关心与其他项目的无缝集成


请注意,使用像GLEW这样的扩展加载程序包装库可能对您没有帮助,因为这些库必须初始化,例如通过调用
glewInit
,但是库是一种黑盒,所以您不知道何时调用它。您可以尝试使用GLEW链接,并在有OpenGL上下文的位置调用
glewInit()
,但YMMV。

有一个#ifdef Q#u WS#WIN包装器来命名DLL的函数,但没有定义它。Qt在Qt5中更改为Q_OS_WIN,因此进行替换修复了问题。

那些符号,OPs构建丢失。您可以在Windows中的no
.lib
中找到它们。它们是现代的profile OpenGL函数,只能通过OpenGL扩展机制访问。好的,我明白你的意思了,谢谢。我后来意识到,有问题的调用在另一个库中,该库正在链接所讨论的.obj。问题是videograph库依赖于另一个库,并且出于某种原因试图静态链接这些调用。很困惑,我想出来了。有一个#ifdef Q#u WS#u WIN包装器来命名DLL的函数,但没有定义它。Qt在第5节改为Q_OS_WIN,因此替换解决了问题。