【问题标题】:Problems linking GLEW into SFML project using CodeBlocks使用 CodeBlock 将 GLEW 链接到 SFML 项目的问题
【发布时间】:2011-11-11 22:18:06
【问题描述】:

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

libglew32.a、libglew32d.a、libglew32mx.a、libglew32mxd.a

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

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

对“_imp__glewInit”的未定义引用

一些reading 告诉我,我需要在#include <glew.h> 之前添加#define GLEW_STATIC,所以我这样做了,现在我得到了一大堆对“wglGetProcAddress@4”错误的未定义引用(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 或任何其他外部库,我能以某种方式更轻松地做到这一点吗?这太棒了!)

【问题讨论】:

    标签: c++ opengl codeblocks sfml glew


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-19
      • 2017-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多