【问题标题】:GLAD link is not providing needed functionsGLAD 链接没有提供所需的功能
【发布时间】:2023-02-17 17:17:04
【问题描述】:

TLDR:GLAD 头文件不允许我使用 openGL 命令,我也不知道为什么。请帮忙。

我最近决定从头开始重新学习 openGL,但几乎立即就被一个有趣的新问题打断了。这是一个细分: -我在 Windows 10 笔记本电脑上。 -我正在用 C++ 编码。 -我正在使用 MinGW 的 g++ 工具进行编译。 -我正在使用 GLFW 和 GLAD。 - 我的文件布局是这样的:

OpenGLTest
    include
        glad
            glad.h
        GLFW
            glfw3.h
            glfw3native.h
        KHR
            khrplatform.h
    glad.c
    glfw3.dll
    GraphicsTest.cpp(Main File)
    libglfw3dll.a(I have forgotten what this does, it's a remnant from older attempts at openGL. Relevant?)
    Makefile(a single command: "g++ GraphicsTest.cpp -g -L glad.c glfw3.dll")

- 据我所知,如果来自 GLAD 和 openGL 的任何和所有命令都被注释掉,该程序将可以完美地编译和运行。然后它所做的就是制作一个小窗口。 - 如果上述行没有被注释掉,编译器将抛出一系列错误,所有错误都遵循以下形式:

D:\Documents\Programming\C++\Programs\OpenGLTest/GraphicsTest.cpp:23: undefined reference to `gladLoadGL'

gladLoadGL 被替换为相关函数。 -文件本身是这样读的:

#include<iostream>
#include<glad\glad.h>
#include<GLFW\glfw3.h>

static void whatIsGoingOnSeriouslyGuysHelp(int id,const char* desc)
{
    std::cout<<desc;
}
int main()
{
    glfwSetErrorCallback(&whatIsGoingOnSeriouslyGuysHelp);
    glfwInit();
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

    GLFWwindow* window = glfwCreateWindow(100,100,"TEST",NULL,NULL);
    if (window == NULL)
    {
        std::cout<<"Window Creation Error";
    }
    glfwMakeContextCurrent(window);
    gladLoadGL();
    //glViewport(0,0,100,100);

    while (!glfwWindowShouldClose(window))
    {
        //std::cout<<"?";
        glfwPollEvents();
        glfwSwapBuffers(window);
        //glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
        //glClear(GL_COLOR_BUFFER_BIT);
    }
    glfwDestroyWindow(window);
    glfwTerminate();
    return 0;
}

我曾尝试重新安装 GLAD,但没有任何效果。我没有尝试重新安装 GLFW,但我不认为 *这就是问题所在。所以,我不确定该怎么做。许多文档和大多数教程都将链接文件视为一次性步骤,因为据我所知,大多数 IDE 基本上都是这样。结果,我没有找到很多可以帮助我的东西(因为我没有使用 IDE)。请纠正我的任何误解或我正在犯的错误。预先感谢您的建议。 -悲伤的机器人

【问题讨论】:

  • 为什么不使用像 CMake 这样的现代构建系统?

标签: c++ opengl mingw glfw glad


【解决方案1】:

您需要在编译命令中包含 glad.c,如下所示:(您之前有一个 -L 告诉 gcc 将 glad.c 视为库的目录)

g++ GraphicsTest.cpp glad.c -g glfw3.dll

,而不是gladLoadGL,你应该使用 GLFW 加载器:

    if (!gladLoadGLLoader((GLADloadproc) glfwGetProcAddress)) {
        std::cout << "Failed to initialize OpenGL context" << std::endl;
        return -1;
    }

最后,你应该花一点时间在一个像样的构建系统上,因为每次编译每个文件都会变得非常慢非常快。这是让您入门的绝对最小 Makefile:

graphicstest: graphicstest.o glad.o
  g++ -g -o $@ $^ glfw3.dll

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多