gpt4 book ai didi

windows - 为什么 mingw 会给出对 `glUseProgram' 的 undefined reference ?

转载 作者:可可西里 更新时间:2023-11-01 11:54:51 27 4
gpt4 key购买 nike

该程序是使用 SDL2 和 openGL 用 C 语言编写的。只要我注释掉

//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。但坦率地说,我真的不明白这个链接的东西,这就是我问这个问题的原因。

最佳答案

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

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

关于windows - 为什么 mingw 会给出对 `glUseProgram' 的 undefined reference ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19948497/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com