You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 13:50:22