分段错误 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.
中提到了这一点
我在尝试使用 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.