解决 Ubuntu的Qt 编译核心报错:cannot find -lGL: No such file or directory
在 Ubuntu 环境下使用 Qt 开发时,很多开发者(尤其是新手)会在编译项目阶段遇到 -1: error: cannot find -lGL: No such file or directory 报错。这个问题看似复杂,实则是 Qt 依赖的 OpenGL 开发库缺失或路径未被识别 导致的 ——Qt 窗口渲染、图形绘制等核心功能依赖 OpenGL 库,编译器找不到 libGL.so 链接文件就会触发该错误。本文将从问题根源出发,提供 3 套循序渐进的解决方案,覆盖常规场景到特殊配置,确保彻底解决问题。
一、先搞懂:为什么会出现 “cannot find -lGL”?
在动手解决前,先明确报错的本质,避免后续踩坑:
- Linux 系统中,库文件命名遵循
libxxx.so规则,编译时编译器会通过-lxxx简化写法查找对应库(比如-lGL就是找libGL.so)。 - Ubuntu 系统默认只预装了 OpenGL 运行时库(
libgl1-mesa-glx,仅支持程序运行),而 Qt 编译项目需要 开发库(含头文件、链接文件libGL.so),开发库对应的包是libgl1-mesa-dev—— 这是绝大多数人报错的核心原因。 - 少数情况下,即使安装了开发库,也可能因
libGL.so软链接缺失、Qt 构建套件(Kit)配置错误,导致编译器找不到库文件。
二、方案一:最常规解法 —— 安装 OpenGL 开发库(90% 场景适用)
这是解决该问题的标准操作,直接通过系统包管理器安装 Qt 所需的 OpenGL 开发依赖,步骤简单且不易出错:
-
打开终端:通过 Ubuntu 快捷键
Ctrl+Alt+T启动终端,先更新软件源(避免因源过期导致安装失败):sudo apt update -
安装 OpenGL 开发库:执行以下命令,安装
libgl1-mesa-dev(Ubuntu 官方维护的 OpenGL 开发包,兼容性最佳):sudo apt install -y libgl1-mesa-dev- 安装过程中会自动下载依赖包(约几十 MB),并在
/usr/lib/x86_64-linux-gnu/目录下生成libGL.so链接文件 —— 这正是编译器需要的关键文件。
- 安装过程中会自动下载依赖包(约几十 MB),并在
-
验证并重新编译:
- 回到 Qt Creator,不要直接点击运行!先点击左上角的 “锤子” 图标(重新构建项目)—— 确保编译器加载新安装的库文件。
- 构建完成后点击 “运行” 按钮(或
Ctrl+R),此时报错通常会直接消失,项目能正常生成窗口程序。
三、方案二:备用解法 —— 手动创建 libGL 软链接(解决路径识别问题)
如果执行方案一后仍报错,大概率是系统中已存在 libGL 库文件,但 libGL.so 软链接缺失或路径不对(比如系统升级后链接文件被删除)。此时需要手动找到库文件路径并创建软链接:
-
第一步:查找系统中的 libGL 库文件:在终端执行以下命令,搜索所有与
libGL.so相关的文件,确定实际库文件路径:find /usr -name "libGL.so*"- 正常情况下会输出类似结果(路径可能略有差异,但核心是找到
libGL.so.1或libGL.so.xxx格式的文件):plaintext
/usr/lib/x86_64-linux-gnu/libGL.so.1 /usr/lib/x86_64-linux-gnu/libGL.so.1.7.0 /usr/lib/i386-linux-gnu/libGL.so.1 # 32位系统路径,64位系统可能没有 - 说明:
libGL.so.1是系统默认的库文件软链接,libGL.so.1.7.0是原始库文件(版本号随系统更新可能变化)。
- 正常情况下会输出类似结果(路径可能略有差异,但核心是找到
-
第二步:手动创建 libGL.so 软链接:编译器默认在
/usr/lib/x86_64-linux-gnu/目录下查找libGL.so,因此需要将找到的libGL.so.1链接到该目录下的libGL.so:# 进入系统库目录(64位系统固定路径,32位系统为 /usr/lib/i386-linux-gnu/) cd /usr/lib/x86_64-linux-gnu/ # 创建软链接(若提示“文件已存在”,执行 sudo rm libGL.so 先删除旧链接,再重新创建) sudo ln -s libGL.so.1 libGL.so -
第三步:重新构建项目:回到 Qt Creator,点击 “锤子” 图标重新构建,此时编译器就能找到
libGL.so,报错即可解决。
四、方案三:终极解法 —— 检查 Qt 构建套件(Kit)配置(特殊场景适用)
如果前两种方案都无效,问题通常出在 Qt Creator 的 构建套件(Kit) 配置上 —— 比如 Kit 未正确识别系统的 GCC 编译器、Qt 版本,或库路径配置错误。此时需要手动校准 Kit 配置:
-
打开 Qt 构建套件设置:
- 启动 Qt Creator,点击顶部菜单栏 “工具” → “选项”(或快捷键
Ctrl+,)。 - 在弹出的窗口中,切换到 “构建和运行” 选项卡,再选择 “套件(Kits)” 子选项卡。
- 启动 Qt Creator,点击顶部菜单栏 “工具” → “选项”(或快捷键
-
校准当前使用的 Kit:
- 在左侧列表中选中当前项目使用的 Kit(通常是
Desktop Qt 5.15.2 GCC 64bit或你安装的 Qt 版本对应的 Kit),重点检查以下 3 个配置项:- 编译器:确保 “C 编译器” 选择
GCC(路径通常是/usr/bin/gcc),“C++ 编译器” 选择G++(路径通常是/usr/bin/g++)。若显示 “无”,点击右侧 “添加” 按钮,手动选择这两个路径。 - Qt 版本:确保 “Qt 版本” 选择你实际安装的 Qt 版本(比如
Qt 5.15.2 GCC 64bit),而非 “无” 或其他版本。 - 调试器:确保 “调试器” 选择
GDB(路径通常是/usr/bin/gdb),若未安装 GDB,先执行sudo apt install gdb安装。
- 编译器:确保 “C 编译器” 选择
- 在左侧列表中选中当前项目使用的 Kit(通常是
-
应用配置并重启 Qt Creator:
- 点击窗口右下角的 “应用” → “确定”,然后关闭 Qt Creator 并重新启动(确保配置生效)。
- 重新打开项目,点击 “锤子” 图标构建,报错即可彻底解决。
五、验证解决方案是否生效
解决后,需要确认问题已彻底解决,避免后续编译再出问题:
- 在 Qt Creator 中点击 “构建” 按钮(锤子图标),观察 “编译输出” 面板 —— 若没有出现
cannot find -lGL错误,且显示 “已完成,退出代码 0”,说明编译成功。 - 点击 “运行” 按钮,若能正常弹出 Qt 窗口程序(比如之前的 “Hello Qt” 窗口),说明库文件已正常加载,问题彻底解决。
六、常见疑问解答(避坑指南)
-
问:为什么安装了
libgl1-mesa-glx还是报错?答:libgl1-mesa-glx是 OpenGL 运行时库,仅支持已编译好的程序运行;而 Qt 编译需要 开发库(libgl1-mesa-dev),开发库包含编译器需要的头文件和libGL.so链接文件,二者不能混淆。 -
问:手动创建软链接时提示 “权限不够” 怎么办?答:必须在
ln -s命令前加sudo(管理员权限),因为/usr/lib/x86_64-linux-gnu/是系统目录,普通用户没有写入权限。 -
问:Qt 6 版本遇到这个报错,解法一样吗?答:完全一样!无论是 Qt 5 还是 Qt 6,在 Ubuntu 下依赖的 OpenGL 库都是
libgl1-mesa-dev,解法没有区别。
更多推荐



所有评论(0)