c++ - 使用 CodeBlocks 将 GLEW 链接到 SFML 项目时出现问题

标签 c++ opengl codeblocks sfml glew

所以我正在尝试学习编写着色器并将它们合并到我的 OpenGL 程序中(我使用 SFML 1.6 创建有效的 OpenGL 环境,而不是乱搞 GLUT;我的 IDE 是 Codeblocks;我的卡支持 OpenGL 3.1 和 GLSL 1.3).但是,我遇到了障碍;看起来我需要 GLEW 来帮助将 GLSL 着色器合并到我的程序中。所以我去找 GLEW 的源代码并使用 CodeBlocks 将其编译为静态库,按照最后评论的说明 here (我将 #define GLEW_STATIC 添加到 c. 文件中,因为我不清楚我应该将它添加到哪里),所以我现在有四个 .a 文件:

libglew32.a, libglew32d.a, libglew32mx.a, libglew32mxd.a

我已经告诉我的编译器在哪里可以找到头文件(glew.h、glxew.h、wglew.h),并且我已经通过添加相关目录告诉链接器在哪里可以找到库(上面)到设置->编译器和调试器...->搜索目录。在我的项目中,在 Build Options->Linker Settings->Link Libraries 下,我还链接了上面的四个。

完成上述所有操作后,我在尝试调用 glewInit() 时遇到以下错误:

undefined reference to '_imp__glewInit'

一些 reading告诉我我需要添加 #define GLEW_STATIC之前#include <glew.h> ,所以我这样做了,现在我得到了一大堆对“wglGetProcAddress@4”错误的 undefined reference (我程序中唯一的 GLEW 代码行是 glewInit();):

 Design\Learning C++\OPEN-GL\OpenGL Experiment 6 - 27-block Terrain Test\main.cpp||In function 'int main()':|
 Design\Learning C++\OPEN-GL\OpenGL Experiment 6 - 27-block Terrain Test\main.cpp|43|warning: unused variable 'LightOn'|
C:\Program Files (x86)\CodeBlocks\MinGW\downloaded\glew-1.7.0\afiles\libglew32.a(glew.o):glew.c|| undefined reference to `glGetString@4'|
C:\Program Files (x86)\CodeBlocks\MinGW\downloaded\glew-1.7.0\afiles\libglew32.a(glew.o):glew.c|| undefined reference to `wglGetProcAddress@4'|
C:\Program Files (x86)\CodeBlocks\MinGW\downloaded\glew-1.7.0\afiles\libglew32.a(glew.o):glew.c|| undefined reference to `wglGetProcAddress@4'|
C:\Program Files (x86)\CodeBlocks\MinGW\downloaded\glew-1.7.0\afiles\libglew32.a(glew.o):glew.c|| undefined reference to `wglGetProcAddress@4'|
C:\Program Files (x86)\CodeBlocks\MinGW\downloaded\glew-1.7.0\afiles\libglew32.a(glew.o):glew.c|| undefined reference to `wglGetProcAddress@4'|
C:\Program Files (x86)\CodeBlocks\MinGW\downloaded\glew-1.7.0\afiles\libglew32.a(glew.o):glew.c|| undefined reference to `wglGetProcAddress@4'|
C:\Program Files (x86)\CodeBlocks\MinGW\downloaded\glew-1.7.0\afiles\libglew32.a(glew.o):glew.c|| more undefined references to `wglGetProcAddress@4' follow|
C:\Program Files (x86)\CodeBlocks\MinGW\downloaded\glew-1.7.0\afiles\libglew32.a(glew.o):glew.c|| undefined reference to `wglGetCurrentDC@0'|
C:\Program Files (x86)\CodeBlocks\MinGW\downloaded\glew-1.7.0\afiles\libglew32.a(glew.o):glew.c|| undefined reference to `wglGetProcAddress@4'|
C:\Program Files (x86)\CodeBlocks\MinGW\downloaded\glew-1.7.0\afiles\libglew32.a(glew.o):glew.c|| undefined reference to `wglGetProcAddress@4'|
C:\Program Files (x86)\CodeBlocks\MinGW\downloaded\glew-1.7.0\afiles\libglew32.a(glew.o):glew.c|| undefined reference to `wglGetProcAddress@4'|
C:\Program Files (x86)\CodeBlocks\MinGW\downloaded\glew-1.7.0\afiles\libglew32.a(glew.o):glew.c|| undefined reference to `wglGetProcAddress@4'|
C:\Program Files (x86)\CodeBlocks\MinGW\downloaded\glew-1.7.0\afiles\libglew32.a(glew.o):glew.c|| undefined reference to `wglGetProcAddress@4'|
C:\Program Files (x86)\CodeBlocks\MinGW\downloaded\glew-1.7.0\afiles\libglew32.a(glew.o):glew.c|| more undefined references to `wglGetProcAddress@4' follow|
C:\Program Files (x86)\CodeBlocks\MinGW\downloaded\glew-1.7.0\afiles\libglew32.a(glew.o):glew.c|| undefined reference to `glGetString@4'|
C:\Program Files (x86)\CodeBlocks\MinGW\downloaded\glew-1.7.0\afiles\libglew32.a(glew.o):glew.c|| undefined reference to `glGetString@4'|
C:\Program Files (x86)\CodeBlocks\MinGW\downloaded\glew-1.7.0\afiles\libglew32.a(glew.o):glew.c|| undefined reference to `wglGetProcAddress@4'|
C:\Program Files (x86)\CodeBlocks\MinGW\downloaded\glew-1.7.0\afiles\libglew32.a(glew.o):glew.c|| undefined reference to `wglGetProcAddress@4'|
C:\Program Files (x86)\CodeBlocks\MinGW\downloaded\glew-1.7.0\afiles\libglew32.a(glew.o):glew.c|| undefined reference to `wglGetProcAddress@4'|
C:\Program Files (x86)\CodeBlocks\MinGW\downloaded\glew-1.7.0\afiles\libglew32.a(glew.o):glew.c|| undefined reference to `wglGetProcAddress@4'|
C:\Program Files (x86)\CodeBlocks\MinGW\downloaded\glew-1.7.0\afiles\libglew32.a(glew.o):glew.c|| undefined reference to `wglGetProcAddress@4'|
C:\Program Files (x86)\CodeBlocks\MinGW\downloaded\glew-1.7.0\afiles\libglew32.a(glew.o):glew.c|| more undefined references to `wglGetProcAddress@4' follow|
C:\Program Files (x86)\CodeBlocks\MinGW\downloaded\glew-1.7.0\afiles\libglew32.a(glew.o):glew.c|| undefined reference to `wglGetCurrentDC@0'|
||=== Build finished: 23 errors, 1 warnings ===|

我很茫然;所有这一切的技术方面(链接/编译等)对我来说仍然是新的和令人困惑的。

我需要做什么才能让 GLEW 工作,以便我可以将 GLSL 着色器合并到我的 SFML OpenGL 项目中? (或者我可以在没有 GLEW 或任何其他外部库的情况下以某种方式更轻松地做到这一点吗?这太棒了!)

最佳答案

您还需要链接 opengl32.lib。缺少链接器提示的那些功能是 opengl32.dll 的一部分,要访问它,您需要链接它。不在静态库中,而是在您的最终程序中。从技术上讲,静态库与目标文件的存档完全不同,即编译阶段的结果。链接到 DLL 需要在可执行二进制文件的上下文中进行。

关于c++ - 使用 CodeBlocks 将 GLEW 链接到 SFML 项目时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7330486/

相关文章:

c++ - CMake 生成的 Xcode 项目无法找到从 Xcode 构建的二进制 "Products"

opengl - GL_UNIFORM_BLOCK_DATA_SIZE 的 glGetActiveUniformBlockParam 背后的逻辑是什么?

c++ - OpenGL:如何解决Cube的照明问题?

C++ 奇怪的 "undefined reference"

c++ - Clang 或 GCC 拒绝/接受此 CTAD 代码是否正确?

c++ - 如何在 Googletest 框架的多个测试中使用 "configurations"的全局变量

c++ - 不断收到错误: expected unqualified id at end of input- C++

c++ - 如何测量从计算到渲染着色器的 GPU 上下文切换

c++ - Qt 未定义对 vtable 的引用

c - GTK 应用程序使用 gcc 编译,但不在代码块中编译