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

C++编写GLFW窗口程序报undefined reference链接错误

错误原因

Undefined reference to 'glfwInit'属于C/C++编译流程里的链接阶段错误:

  • 代码中#include引入GLFW头文件的操作,只给编译器提供了函数的声明信息,也就是告诉编译器“存在名为glfwInit的函数,参数、返回值符合对应格式”,但头文件本身不包含函数的实际实现逻辑。
  • 编译进入链接阶段时,链接器需要找到所有被调用函数的实际实现代码,你没有将GLFW、OpenGL对应的库文件告知链接器,链接器找不到所有glfw*、gl*开头的函数实现,就会抛出这串undefined reference报错。
代码笔误修正

你贴的代码末尾存在一处书写错误:
glfwTerminate; 缺少函数调用括号,就算解决链接问题,这里也不会正确执行GLFW资源释放逻辑,需要改为glfwTerminate();。

解决步骤

从报错路径判断你是在Linux环境下使用g++编译,按以下步骤操作即可:

  • 安装依赖库开发包
    Debian/Ubuntu系发行版直接执行命令,安装系统源内的GLFW和OpenGL开发文件:
    sudo apt install libglfw3-dev libgl1-mesa-dev
    
  • 编译时追加链接参数
    编译命令必须带上GLFW和OpenGL的链接标记,正确的编译命令参考:
    g++ main.cpp -o glfw_app -lglfw -lGL
    
    其中-lglfw告诉链接器链接GLFW库,-lGL告诉链接器链接系统OpenGL实现库,缺少这两个参数就会复现当前报错。
  • 如果你没有将GLFW安装到系统默认路径,而是自行下载源码编译放在项目目录下,编译时还需要额外指定头文件搜索路径和库文件搜索路径,示例:
    g++ main.cpp -o glfw_app -I./GLFW头文件存放路径 -L./GLFW编译库文件存放路径 -lglfw -lGL
    
修正后可正常编译的代码
#include "include/GLFW/glfw3.h"
#include "deps/linmath.h"
#include <stdlib.h>
#include <stdio.h>

int main(){

    if (!glfwInit()) {
        exit(EXIT_FAILURE);
    }
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0);

    GLFWwindow* window = glfwCreateWindow(640, 480, "OPENGL EXAMPLE", NULL, NULL);
    if(!window) {
        glfwTerminate();
        exit(EXIT_FAILURE);
    }
    glfwSwapInterval(1);

    while(!glfwWindowShouldClose(window)) {

        //Setup View
        float ratio;
        int width, height;
        glfwGetFramebufferSize(window, &width, &height);
        ratio = width / (float)height;
        glViewport(0, 0, width, height);
        glClear(GL_COLOR_BUFFER_BIT);

        glfwSwapBuffers(window);
        glfwPollEvents();

    }

    glfwDestroyWindow(window);
    glfwTerminate();
    exit(EXIT_SUCCESS);
}

内容的提问来源于stack exchange,提问作者Chester232

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 00:27:25