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
相关产品推荐
相关产品推荐

