OpenGL/GLEW:未解决的外部_glewInit问题

3

我无法使GLEW与我的程序正确链接。

我已经在我的项目中正确设置了路径(我已经三次检查过了),我尝试了从头开始构建,使用x86库(所有4个——-s、-mxs等)和x64库。

我尝试使用#pragma指令而不是在属性中配置我的项目。

我正在尝试将其作为静态库获取,因此不需要DLL。

我还定义了GLEW_STATIC,正如构建说明所建议的那样。

错误信息:

OGLInit.obj : error LNK2019: unresolved external symbol _glewInit@0 referenced in function "bool __stdcall vexal::OGLStartup(void)" (?OGLStartup@vexal@@YG_NXZ)

我甚至使用dumpbin检查过initGlew是否存在。它存在,并且是外部的。

我也验证了它找到了lib。

搜索C:\Users\Jake\Documents\Vexal2\vexal\vc9_x86\lib\Debug\GLEW.lib:

我已经没有更多的想法了。有什么帮助吗?


你百分之百确定你链接的是静态glew库而不是“导入”库(实际上只是作为dll的代理)吗? - KillianDS
是的。我使用glew_static项目重新构建了它。 - Qix - MONICA WAS MISTREATED
2个回答

1
是的。我使用 glew_static 项目重新构建了它。 只是因为你构建了那个项目,并不意味着你正在链接它。

C:\Users\Jake\Documents\Vexal2\vexal\vc9_x86\lib\Debug\GLEW.lib

这不是静态 GLEW 库。这是 GLEW DLL 版本的导入库。静态 GLEW 库称为 GLEW32s.lib。链接到那个库。

好的,制作了那些库。不仅将DLL添加到解决方案目录中,还添加到项目目录和Debug目录中。仍然出现相同的错误。 - Qix - MONICA WAS MISTREATED
你不应该链接到 DLL。你正在构建静态 GLEW,而不是 DLL 版本。如果你想将 GLEW 作为 DLL 使用,你必须删除 GLEW_STATIC 定义。 - Nicol Bolas
这就是我一直在做的——我在项目中定义了GLEW_STATIC并进行了构建,生成了GLEW.lib(这也是我告诉它要生成的)。 - Qix - MONICA WAS MISTREATED

1
问题出在调用约定上。我将调用约定设置为__stdcall而不是__cdecl,将GLFW代码中的_glfwTerminate_atexit( void )更改为__cdecl,然后进行构建。

问题已解决!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接