构建成功,但尝试运行程序时出现 GLEW 错误
Posted
技术标签:
【中文标题】构建成功,但尝试运行程序时出现 GLEW 错误【英文标题】:Build successful, but I get GLEW error when trying to run a program 【发布时间】:2014-03-31 01:18:02 【问题描述】:我正在尝试在 CodeBlocks 13.12 中编译和运行 C++ 和 OpenGL(带有 GLEW)程序。
代码构建成功,但是当我想运行它时,它给了我错误(未找到入口点)说:
程序入口点 glewInit@0 不能位于 动态链接库glew32.dll .
glew32.dll 位于 System32 文件夹中(我使用的是 Win7 x64)。
编辑:
我得到的当前错误是:
||=== Build: Debug in tutorial2cpp (compiler: GNU GCC Compiler) ===|
obj\Debug\glew.o||In function `glewInit_GL_VERSION_1_2':|
N:\projekticpp\OpenGL\samhocevartutorial\tutorial2cpp\glew.c|3233|undefined reference to `wglGetProcAddress@4'|
N:\projekticpp\OpenGL\samhocevartutorial\tutorial2cpp\glew.c|3234|undefined reference to `wglGetProcAddress@4'|
N:\projekticpp\OpenGL\samhocevartutorial\tutorial2cpp\glew.c|3235|undefined reference to `wglGetProcAddress@4'|
N:\projekticpp\OpenGL\samhocevartutorial\tutorial2cpp\glew.c|3236|undefined reference to `wglGetProcAddress@4'|
obj\Debug\glew.o||In function `glewInit_GL_VERSION_1_3':|
N:\projekticpp\OpenGL\samhocevartutorial\tutorial2cpp\glew.c|3253|undefined reference to `wglGetProcAddress@4'|
obj\Debug\glew.o:N:\projekticpp\OpenGL\samhocevartutorial\tutorial2cpp\glew.c|3254|more undefined references to `wglGetProcAddress@4' follow|
obj\Debug\glew.o||In function `glewGetExtension@4':|
N:\projekticpp\OpenGL\samhocevartutorial\tutorial2cpp\glew.c|9475|undefined reference to `glGetString@4'|
obj\Debug\glew.o||In function `glewContextInit':|
N:\projekticpp\OpenGL\samhocevartutorial\tutorial2cpp\glew.c|9495|undefined reference to `glGetString@4'|
N:\projekticpp\OpenGL\samhocevartutorial\tutorial2cpp\glew.c|9535|undefined reference to `glGetString@4'|
obj\Debug\glew.o||In function `glewInit_WGL_3DL_stereo_control':|
N:\projekticpp\OpenGL\samhocevartutorial\tutorial2cpp\glew.c|11540|undefined reference to `wglGetProcAddress@4'|
obj\Debug\glew.o||In function `glewInit_WGL_AMD_gpu_association':|
N:\projekticpp\OpenGL\samhocevartutorial\tutorial2cpp\glew.c|11553|undefined reference to `wglGetProcAddress@4'|
N:\projekticpp\OpenGL\samhocevartutorial\tutorial2cpp\glew.c|11554|undefined reference to `wglGetProcAddress@4'|
N:\projekticpp\OpenGL\samhocevartutorial\tutorial2cpp\glew.c|11555|undefined reference to `wglGetProcAddress@4'|
N:\projekticpp\OpenGL\samhocevartutorial\tutorial2cpp\glew.c|11556|undefined reference to `wglGetProcAddress@4'|
obj\Debug\glew.o:N:\projekticpp\OpenGL\samhocevartutorial\tutorial2cpp\glew.c|11557|more undefined references to `wglGetProcAddress@4' follow|
obj\Debug\glew.o||In function `wglewGetExtension@4':|
N:\projekticpp\OpenGL\samhocevartutorial\tutorial2cpp\glew.c|12111|undefined reference to `wglGetCurrentDC@0'|
obj\Debug\glew.o||In function `wglewContextInit@0':|
N:\projekticpp\OpenGL\samhocevartutorial\tutorial2cpp\glew.c|12124|undefined reference to `wglGetProcAddress@4'|
N:\projekticpp\OpenGL\samhocevartutorial\tutorial2cpp\glew.c|12125|undefined reference to `wglGetProcAddress@4'|
N:\projekticpp\OpenGL\samhocevartutorial\tutorial2cpp\glew.c|12133|undefined reference to `wglGetCurrentDC@0'|
||=== Build failed: 19 error(s), 0 warning(s) (0 minute(s), 1 second(s)) ===|
选择的编译器是 GNU GCC Compiler,我没有更改任何编译器设置。
我想检查 this tutorial ,这显然只是在 part #1 中添加了一些东西。所以我已将第 1 部分代码复制到项目中,但我得到了所有这些错误。显然,我缺少一些基础知识,因为大多数试图让它运行的人似乎没有任何重大问题。因此,我几乎陷入困境,但想学习如何解决此类问题,以便将来避免它们。
【问题讨论】:
【参考方案1】:基本上这个错误消息告诉您,您链接的符号定义(.lib
)与您的系统找到的 DLL 不匹配。
您最好的做法是将 GLEW 与您的程序静态链接,这样可以完全避免 DLL 问题。请参阅http://glew.sourceforge.net/install.html 上的“包括源文件/项目文件”部分了解如何操作。
glew32.dll 位于 System32 文件夹中
切勿将任何不属于 Windows 发行版的内容写入 System32
或 \Windows
下的任何其他目录 - 事情会中断。
【讨论】:
@JamesC:首先也是最重要的:不要为 GLEW 的二进制下载而烦恼。库的二进制分发的问题是,它们必须与您使用的编译器匹配。如果他们不这样做,您就会遇到麻烦(实际上就像您拥有的那样)。获取 GLEW 的源代码,将 glew.c 添加到您的项目中,并将其附加到要编译的源文件列表中。 @JamesC:你现在遇到了什么错误?请在您的问题中添加完整的错误日志。您还使用哪个构建环境/工具链/编译器版本? CodeBlocks 默认附带 MinGW-GCC,但也有其他选项。 我已编辑问题以包含带有错误日志的 txt 文件。如果您告诉我可以在哪里检查“构建环境/工具链/编译器版本”,我将不胜感激,我对编程和 CodeBlocks 比较陌生,所以它对我有很大帮助。总而言之,我相信我在添加和编辑文件时几乎把项目搞砸了。也许您可以通过编辑您的答案来提供帮助,并让我知道如果我从头开始 GLEW 项目我必须采取哪些步骤。这是我能想到的最防错的解决方案 =) 谢谢。 @JamesC:供日后参考:*** 的礼仪是将日志、源代码等文本直接粘贴到问题中。不要使用指向 Dropbox 或类似内容的链接。 @JamesC:请注意,错误报告带有前面的l
,所以我想说您的配置中的某些内容仍然是错误的。同样在 GCC 中,库也可以是名称 libopengl32.a
和 libgdi32.a
;但这并不重要,因为链接器只采用没有任何文件前缀或后缀的库名称。在链接器命令行上,选项类似于-lopengl32 -lgdi32
(请注意,没有尾随.lib
,并且文件名前面的任何lib…
都不会传递给-l
编译器开关)。以上是关于构建成功,但尝试运行程序时出现 GLEW 错误的主要内容,如果未能解决你的问题,请参考以下文章
尝试运行并构建到 iPhone 模拟器时出现 Flutter Xcode 致命错误
尝试构建基于简单 UITabBarController 的 iOS 应用程序时出现运行时错误