使用CodeBlocks将GLEW链接到SFML项目的问题

Problems linking GLEW into SFML project using CodeBlocks

本文关键字:SFML 项目 问题 链接 CodeBlocks GLEW 使用      更新时间:2023-10-16

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

libglew32。libglew32d。libglew32mx。一个,libglew32mxd.a

我已经告诉我的编译器在哪里找到头文件(glew.h, glxew.h, glew.h),我已经告诉链接器在哪里找到库(上面),通过添加相关目录Settings-> compiler &调试器……->搜索目录。在我的项目中,在构建选项->链接器设置->链接库下,我也链接了上面四个。

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

对'_imp__glewInit'的未定义引用

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

 DesignLearning C++OPEN-GLOpenGL Experiment 6 - 27-block Terrain Testmain.cpp||In function 'int main()':|
 DesignLearning C++OPEN-GLOpenGL Experiment 6 - 27-block Terrain Testmain.cpp|43|warning: unused variable 'LightOn'|
C:Program Files (x86)CodeBlocksMinGWdownloadedglew-1.7.0afileslibglew32.a(glew.o):glew.c|| undefined reference to `glGetString@4'|
C:Program Files (x86)CodeBlocksMinGWdownloadedglew-1.7.0afileslibglew32.a(glew.o):glew.c|| undefined reference to `wglGetProcAddress@4'|
C:Program Files (x86)CodeBlocksMinGWdownloadedglew-1.7.0afileslibglew32.a(glew.o):glew.c|| undefined reference to `wglGetProcAddress@4'|
C:Program Files (x86)CodeBlocksMinGWdownloadedglew-1.7.0afileslibglew32.a(glew.o):glew.c|| undefined reference to `wglGetProcAddress@4'|
C:Program Files (x86)CodeBlocksMinGWdownloadedglew-1.7.0afileslibglew32.a(glew.o):glew.c|| undefined reference to `wglGetProcAddress@4'|
C:Program Files (x86)CodeBlocksMinGWdownloadedglew-1.7.0afileslibglew32.a(glew.o):glew.c|| undefined reference to `wglGetProcAddress@4'|
C:Program Files (x86)CodeBlocksMinGWdownloadedglew-1.7.0afileslibglew32.a(glew.o):glew.c|| more undefined references to `wglGetProcAddress@4' follow|
C:Program Files (x86)CodeBlocksMinGWdownloadedglew-1.7.0afileslibglew32.a(glew.o):glew.c|| undefined reference to `wglGetCurrentDC@0'|
C:Program Files (x86)CodeBlocksMinGWdownloadedglew-1.7.0afileslibglew32.a(glew.o):glew.c|| undefined reference to `wglGetProcAddress@4'|
C:Program Files (x86)CodeBlocksMinGWdownloadedglew-1.7.0afileslibglew32.a(glew.o):glew.c|| undefined reference to `wglGetProcAddress@4'|
C:Program Files (x86)CodeBlocksMinGWdownloadedglew-1.7.0afileslibglew32.a(glew.o):glew.c|| undefined reference to `wglGetProcAddress@4'|
C:Program Files (x86)CodeBlocksMinGWdownloadedglew-1.7.0afileslibglew32.a(glew.o):glew.c|| undefined reference to `wglGetProcAddress@4'|
C:Program Files (x86)CodeBlocksMinGWdownloadedglew-1.7.0afileslibglew32.a(glew.o):glew.c|| undefined reference to `wglGetProcAddress@4'|
C:Program Files (x86)CodeBlocksMinGWdownloadedglew-1.7.0afileslibglew32.a(glew.o):glew.c|| more undefined references to `wglGetProcAddress@4' follow|
C:Program Files (x86)CodeBlocksMinGWdownloadedglew-1.7.0afileslibglew32.a(glew.o):glew.c|| undefined reference to `glGetString@4'|
C:Program Files (x86)CodeBlocksMinGWdownloadedglew-1.7.0afileslibglew32.a(glew.o):glew.c|| undefined reference to `glGetString@4'|
C:Program Files (x86)CodeBlocksMinGWdownloadedglew-1.7.0afileslibglew32.a(glew.o):glew.c|| undefined reference to `wglGetProcAddress@4'|
C:Program Files (x86)CodeBlocksMinGWdownloadedglew-1.7.0afileslibglew32.a(glew.o):glew.c|| undefined reference to `wglGetProcAddress@4'|
C:Program Files (x86)CodeBlocksMinGWdownloadedglew-1.7.0afileslibglew32.a(glew.o):glew.c|| undefined reference to `wglGetProcAddress@4'|
C:Program Files (x86)CodeBlocksMinGWdownloadedglew-1.7.0afileslibglew32.a(glew.o):glew.c|| undefined reference to `wglGetProcAddress@4'|
C:Program Files (x86)CodeBlocksMinGWdownloadedglew-1.7.0afileslibglew32.a(glew.o):glew.c|| undefined reference to `wglGetProcAddress@4'|
C:Program Files (x86)CodeBlocksMinGWdownloadedglew-1.7.0afileslibglew32.a(glew.o):glew.c|| more undefined references to `wglGetProcAddress@4' follow|
C:Program Files (x86)CodeBlocksMinGWdownloadedglew-1.7.0afileslibglew32.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需要发生在可执行二进制文件的上下文中。