代码之家  ›  专栏  ›  技术社区  ›  Ty Q.

分段故障GLFW3/GLAD

  •  0
  • Ty Q.  · 技术社区  · 2 年前

    我在尝试使用GLFW3创建窗口时遇到了一个非常奇怪的分段错误。

    Linux内核: 5.4.0-113-通用

    NVIDIA驱动程序: 510.73.05

    OpenGL(来自 glxinfo ): OpenGL core profile版本字符串:4.5(core profile)Mesa 21.2.6

    很高兴: C/C++OpenGL 4.5内核(无扩展)

    GLFW: 3.3.7

    我使用这个漂亮的命令来编译:

    gcc src/*.c -Wall -Ideps/glad/include -Ideps/glfw/include -Ldeps/glad/lib -Ldeps/glfw/lib -lglad -lglfw3 -lGL -lglfw3 -lX11 -lXxf86vm -lXrandr -lpthread -lXi -ldl -lm -o bin/balldrop

    我所做的就是用 cmake -S . -B. && make 并隔离了 libglfw3.a 以及include目录,这样就只剩下它了,并编译了 glad.c 将文件归档到 libglad.a 使其也可以静态绑定。没有错误或警告。

    希望这是足够的背景。总之,我只是在运行以下代码:

    #include <stdio.h>
    #include <stdlib.h>
    #include <glad/glad.h>
    #define GLFW_INCLUDE_NONE
    #include <GLFW/glfw3.h>
    int main() {
        GLFWwindow* window;
        if(!glfwInit()) return -1;
        glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
        glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
        glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
        window = glfwCreateWindow(640, 480, "Hello World", NULL, NULL);
        if(!window) {
            glfwTerminate();
            return -1;
        }
        glfwMakeContextCurrent(window);
        while(!glfwWindowShouldClose(window)) {
            glClear(GL_COLOR_BUFFER_BIT);
            glfwSwapBuffers(window);
            glfwPollEvents();
        }
        glfwDestroyWindow(window);
        glfwTerminate();
        return 0;
    }
    

    编译后,我立即得到一个segfault。跑步 gdb 我看到segfault只是请求一些地址 0x0000000000000000 @ ?? 同时也引用主地址。老实说,我不太确定这会是什么。我的驱动程序是最新的,我的内核是最新的,驱动程序支持OpenGL 4.5,我添加了所有的命令行标志来编译这个该死的东西。

    1 回复  |  直到 2 年前
        1
  •  1
  •   kotatsuyaki    2 年前

    您正在使用OpenGL调用( glClear )在初始化glad之前。你必须这样做 gladLoadGLLoader((GLADloadproc)glfwGetProcAddress) 在此之前。这在中提到 the getting started guide of GLFW

    推荐文章
    Ty Q.  ·  分段故障GLFW3/GLAD
    2 年前