wglGetProcAddress is undefined

wglGetProcAddress is undefined

本文关键字:undefined is wglGetProcAddress      更新时间:2023-10-16

我正在学习OpenGL教程,但我一直在链接库。

#define GLEW_STATIC
#include <glew.h>
#include <glfw3.h>
#include <thread>

typedef void (*GENBUFFERS) (GLsizei, GLuint*);
int main()
{
    glfwInit();
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
    glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
    glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);
    GLFWwindow* window = glfwCreateWindow(800, 600, "OpenGL", nullptr, nullptr);
    glfwMakeContextCurrent(window);
    while (glfwWindowShouldClose(window))
    {
        glfwSwapBuffers(window);
        glfwPollEvents();
    }
    GENBUFFERS glGenBuffers = (GENBUFFERS) wglGetProcAddress("glGenBuffers");
    GLuint buffer;
    glGenBuffers(1, &buffer);

    glfwTerminate();
}

由于某些原因,函数wglGetProcAddress未定义。这些是我链接的库:glew32.lib、glew32s.lib、glfw3.lib、opengl32.lib。

MSDN说wglGetProcAddress包含在opengl32.lib中。我做错了什么?

错误1错误C3861:"wglGetProcAddress":找不到标识符e:\workspaces\visual studio\learningopengl1\learningopengl1\main.cpp 32 1 learningopengl1

2 IntelliSense:标识符";wglGetProcAddress";未定义e:\Workspaces\Visual Studio\LearningOpenGl1\LearningOpenGl1\main.cpp 34 41 LearningOpenGl1

这不是链接器错误,这是编译器错误,因此您链接的库在现阶段根本无关紧要。

您的编译器告诉您,它不知道wglGetProcAddress,因为它从未看到它的声明。编译器也不应该知道GENBUFFERS,因为该类型也没有在任何地方定义。在官方的glext.h文件中,您要查找的类型称为PFNGLGENBUFFERS

如果您真的想手动使用wgl API,那么您可能应该将GL/gl.h与最新的glext.h一起包含在内,并使用正确的类型名称。

对我来说,最大的问题是:你在这里到底想做什么?您包含了glew.h,这是一个库,其唯一目的是为您执行GL函数指针查询。你所需要做的就是调用glewInit(),就完成了(好吧,别忘了之前在核心配置文件中设置glewExperimental=GL_TRUE,因为GLEW是坏的,如果没有它,核心配置文件就无法工作)。完全不需要手动处理wglGetProcAddress()

此外,您也在使用GLFW。因此,如果您想手动查询函数指针,最好使用GLFW对特定于平台的指针查询API的抽象,它将是glfwGetProcAddress(),并且应该已经声明了——同样,不需要使用wglGetProcAddress()