静态链接库时出现 glew 链接器错误

Linker error with glew when library is statically linked

我正在尝试在 Visual Studio 2012 年构建一个 opengl 项目。我想静态包含​​ glew 库,所以我从源代码构建它并将生成的 glew32sd.lib 复制到我的 lib 目录。我将此 lib 路径提供给 Visual Studio 并将 "glew32sd.lib" 放入我在 VS 中的附加依赖项。

现在当我在main.cpp中编译示例代码时:

#define GLEW_STATIC
#include<GL/glew.h>
int main(){
    glewInit();
    return 0;
}

我收到以下错误:

1>  main.cpp
1>glew32sd.lib(glew.obj) : error LNK2019: unresolved external symbol __imp__glGetString@4 referenced in function _glewGetExtension@4
1>glew32sd.lib(glew.obj) : error LNK2019: unresolved external symbol __imp__wglGetCurrentDC@0 referenced in function _wglewInit@0
1>glew32sd.lib(glew.obj) : error LNK2019: unresolved external symbol __imp__wglGetProcAddress@4 referenced in function _wglewInit@0
1>C:\Projects\OpenGL\opengl\Debug\opengl.exe : fatal error LNK1120: 3 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

根据我的理解,这个错误应该是因为编译器找不到函数调用的定义。

以下是一些相关的快照: The Library dependencies of my project

Path to libs

为什么会出现这个错误?我尝试重建解决方案,但这也无济于事。任何建议都会有所帮助。

您的 linker 设置有两个问题:

  • 您可以 link 对抗 glew 的静态 linked 版本或动态 linked 版本,但绝不能同时对抗两者。因此,如果你想静态 linked 从附加依赖项中删除 glew32d.lib(或 glew32.lib 在发布模式下)。

  • Glew 要求您还 link 再次访问 opengl 库。将 OpenGL32.lib 添加到附加依赖项中。