Ubuntu20.04下GLFW与GLAD头文件冲突致C++编译失败求助
问题解决步骤
1. 修复头文件包含顺序
核心问题是头文件包含顺序错误:GLFW的头文件会自动引入系统自带的OpenGL头,而GLAD要求自己是第一个被包含的OpenGL相关头文件。修改代码的include顺序:
#include <iostream> #include "glad/glad.h" // 将glad头文件放在GLFW之前 #include <GLFW/glfw3.h> int main() { glfwInit(); glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); GLFWwindow* window = glfwCreateWindow(800, 800, "Endless Space", NULL, NULL); if (window == NULL) { std::cout << "FAILED TO LAUNCH WINDOW! TERMINATING..." << std::endl; glfwTerminate(); return -1; } glfwMakeContextCurrent(window); // 修复循环条件:glfwWindowShouldClose需要传入window指针 do { glfwPollEvents(); } while (!glfwWindowShouldClose(window)); glfwDestroyWindow(window); glfwTerminate(); return 0; }
2. 配置GLAD
GLAD不在Ubuntu软件源中,需手动生成并添加到项目:
- 生成GLAD代码:选择OpenGL 3.3版本、Core Profile,生成后得到
include和src文件夹 - 将
include下的glad、KHR文件夹复制到项目的include目录,或系统头文件目录/usr/include - 将
src/glad.c文件复制到你的项目目录
3. 正确的编译命令
编译时需链接GLFW及其依赖的系统库,同时编译glad.c文件:
g++ main.cpp glad.c -o EndlessSpace -lglfw -lGL -lm -lXrandr -lXi -lX11 -lXxf86vm -lpthread
各链接库说明:
-lglfw:链接GLFW库-lGL:链接系统OpenGL库- 其余库为GLFW依赖的X11窗口系统、线程等底层库
内容的提问来源于stack exchange,提问作者TPGlitch
相关产品推荐
相关产品推荐

