构建成功,但尝试运行程序时出现 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.alibgdi32.a;但这并不重要,因为链接器只采用没有任何文件前缀或后缀的库名称。在链接器命令行上,选项类似于-lopengl32 -lgdi32(请注意,没有尾随.lib,并且文件名前面的任何lib… 都不会传递给-l 编译器开关)。

以上是关于构建成功,但尝试运行程序时出现 GLEW 错误的主要内容,如果未能解决你的问题,请参考以下文章

尝试运行并构建到 iPhone 模拟器时出现 Flutter Xcode 致命错误

尝试构建基于简单 UITabBarController 的 iOS 应用程序时出现运行时错误

尝试为 iphone 快速构建 tableView 时出现错误

编译JAVA程序成功但运行javac命令时出现错误

编译JAVA程序成功但运行javac命令时出现错误

尝试构建和现有flutter应用程序时出现flutter web错误