在项目中编译GLEW源会导致未解析的外部符号

时间:2017-12-27 00:45:21

标签: c++ opengl sdl glew

当我尝试编译VS 2015 C ++项目时,我得到了9个未解决的外部符号错误。当我尝试将GLEW编译为我的项目的一部分(使用源代码)时发生错误。 Google搜索显示此错误通常是由于缺少OpenGL库引起的,但我已经在使用SDL2,据我所知,SDL2的源代码中包含OpenGL。这是我尝试编译时的输出。

Error   LNK2001 unresolved external symbol __imp__wglGetCurrentDC@0 glew.obj    1   
Error   LNK2001 unresolved external symbol __imp__wglGetProcAddress@4   glew.obj    1   
Error   LNK2001 unresolved external symbol __imp__glGetString@4 glew.obj    1   
Error   LNK2001 unresolved external symbol __imp__glGetIntegerv@8   glew.obj    1   
Error   LNK2001 unresolved external symbol __imp__wglCreateContext@4    glewinfo.obj    1   
Error   LNK2001 unresolved external symbol __imp__wglDeleteContext@4    glewinfo.obj    1   
Error   LNK2001 unresolved external symbol __imp__wglMakeCurrent@8  glewinfo.obj    1   
Error   LNK2001 unresolved external symbol __imp__wglGetCurrentContext@0    visualinfo.obj  1   
Error   LNK2001 unresolved external symbol _gluGetString@   4visualinfo.obj     1   
Error   LNK1120 9 unresolved externals  Executable.exe  1   

如果我需要在项目中包含另一个库,我可以在哪里下载它?此外,如果有,它有源代码吗?如果可能的话,我宁愿避免使用.dll。

编辑:这不仅仅是未解析的外部符号的一般示例。我问的是我需要包含哪些库来修复错误。

1 个答案:

答案 0 :(得分:0)

要将GLEW编译为添加到项目中的源文件,请使用以下步骤:

  1. 唯一需要的文件是glew.c。删除glewinfo.cvisualinfo.c - 这些只是GLEW提供的示例程序。此步骤将解决缺少的glu*符号。

  2. GLEW_STATIC添加到预处理程序定义列表中。默认是将GLEW编译为DLL。

  3. opengl32.lib添加到附加依赖项列表(在链接器/输入下)。这将解决丢失的wgl*符号。

  4. 或者,您可以考虑使用GLEW的build/vc12子文件夹下包含的项目文件来构建静态库并与其链接,或者将项目glew_static添加到您的解决方案中。上面的步骤2和3仍然是必要的。

    BTW,记录了每个Windows API函数,并描述了所需的库和头文件。例如,docs for wglGetCurrentDC()有一个表,其中包含提供函数的头,库和DLL。