分段错误 GLFW3/GLAD

Segmentation Fault GLFW3/GLAD

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

Linux 内核:5.4.0-113-generic

NVIDIA 驱动程序:510.73.05

OpenGL(来自 glxinfo):OpenGL 核心配置文件版本字符串:4.5(核心配置文件)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 构建 GLFW3 并隔离 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;
}

我在编译时立即遇到段错误。 运行 gdb 我看到段错误只是在请求一些地址 0x0000000000000000 @ ?? 同时还引用了主地址。老实说,我不太确定这可能是什么。我的驱动程序是最新的,我的内核是最新的,驱动程序支持 OpenGL 4.5,我添加了所有命令行标志以编译该死的东西。

您在初始化 glad 之前正在使用 OpenGL 调用 (glClear)。在那之前你必须做gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)the getting started guide of GLFW.

中提到了这一点