我在尝试使用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,我添加了所有的命令行标志来编译这个该死的东西。