在使用GLFW3创建窗口时,我有一个非常奇怪的分段错误。
Linux内核:5.4.0-113-generic
NVIDIA驱动程序:510.73.05
OpenGL (来自glxinfo):OpenGL核心配置文件版本字符串: 4.5 (核心配置文件)Mesa21.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构建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;
}我在编译的时候得到了一个即时的片段错误。运行gdb时,我看到分段错误只是请求一些地址0x0000000000000000 @ ??,同时也引用了主地址。老实说我不太确定这会是什么。我的驱动程序是最新的,我的内核是最新的,驱动程序支持OpenGL 4.5,并且我添加了所有的命令行标志来进行编译。
发布于 2022-05-29 03:26:07
在初始化高兴之前使用OpenGL调用(glClear)。你必须在那之前做gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)。在GLFW入门指南中提到了这一点。
https://stackoverflow.com/questions/72420680
复制相似问题