为什么mingw给出了`glUseProgram'的未定义引用?

时间:2013-11-13 08:06:57

标签: windows opengl-3 mingw32 sdl-2

程序是用C语言编写的,使用SDL2和openGL。只要我发表评论

//glUseProgram(0);

程序编译并运行并显示glCleared颜色。包括gl版本检查:

const char* renderer = (const char*) glGetString(GL_RENDERER);
puts(renderer);
const char* version = (const char*) glGetString(GL_VERSION);
puts(version);
const char* glslVersion = (const char*) glGetString(GL_SHADING_LANGUAGE_VERSION);
puts(glslVersion);

打印出来:

ATI Radeon HD 5670
3.2.11927 Core Profile Context
4.20

gl错误检查:

GLenum error = glGetError();
switch(error){
  case GL_NO_ERROR: puts("no error"); break;
  case GL_INVALID_ENUM: puts("invalid enum"); break;
  case GL_INVALID_VALUE: puts("invalid value"); break;
  case GL_OUT_OF_MEMORY: puts("out of memory"); break;
  case GL_INVALID_FRAMEBUFFER_OPERATION: puts("invalid framebuffer operation"); break;
  default: break;   
}

打印:

no error.

但是当取消注释glUseProgram(0)时,我收到以下错误:

D:\TEMP\ccSTF4cr.o:App.c:(.text+0x320): undefined reference to 'glUseProgram

我也得到:

App.c:54.2: warning: implicit declaration of function 'glUseProgram' 

包含的文件是:

#include "SDL2/SDL.h"
#include "SDL2/SDL_opengl.h"

在Windows XP上使用.bat文件执行程序。 .bat是:

del /F /Q bin\app.exe

set files=main.c App.c EventHub.c Game.c MainShader.c
set libs=-LD:\environments\minGW\mingw32\lib -lmingw32 -lopengl32 -lSDL2main -mwindows -lSDL2  
set objs=bin\main.obj

gcc -Wall -o bin/app %files% %libs%

bin\app.exe

如果你不知道.bats,命令中的%file%和%libs%只是替换变量中的字符串。

问题似乎是上下文不支持后来的glUseProgram函数,除了上下文是支持该函数的版本3.2的事实。在这种情况下,问题似乎是围绕SDL_opengl.h包含正在拾取错误的-lopengl32。但坦率地说,我真的不明白这个联系的原因,这就是我提出这个问题的原因。

1 个答案:

答案 0 :(得分:2)

Microsoft Windows OpenGL API最多只能使用版本1.X的功能。 (因为他们更喜欢你使用Direct3D。)

要在MS Windows上使用现代OpenGL(比1995年更新的东西),你需要一个扩展管理器,如GLEW或GLEE。有关详细信息,请参阅OpenGL SuperBible,任何版本。