Qt5.14.02构建运行报错error: cannot find -lGL

451 阅读2分钟

记录错误

在Ubuntu20.04上安装了QT5.14.02版本,在创建一个mainwindow项目后,构建报错👎 error: cannot find -lGL

bd8b02c62ad13a6f9d7719d40b3a504a.gif

解决过程

方法一

在网上按照很多帖子的做法:
问题分析:缺少GL库,安装即可
解决办法:sudo apt-get install libgl1-mesa-dev
但在安装这个过程中会报很多依赖问题,基本不能继续安装。

image.png

所以,不推荐这种方式,因为一个一个解决依赖太麻烦了,还有可能触发新问题!

方法二【推荐】

以Qt的角度思考原因

Qt 找不到 OpenGL 的动态链接库(libGL.so)。OpenGL 在大部分 Linux 发行版中都是默认安装的,包括 Ubuntu、CentOS 等,找不到该链接库一般都是路径不对。

解决方法

Qt 默认在 /usr/lib/ 目录下查找动态链接库,但是很多 Linux 发行版将 OpenGL 链接库放在其它目录。 例如我使用的是 Ubuntu,OpenGL 链接库位于 /usr/lib/i386-linux-gnu/mesa/ 目录 ,而对于CentOS 7,OpenGL 链接库位于 /usr/lib64/ 目录。

只要我们把 libGL.so 拷贝到 /usr/lib/ 目录,或者在 /usr/lib/ 目录下为 libGL.so 创建一个链接,就能解决问题。

注意:

Linux 发行版自带的 OpenGL 链接库在后缀中添加了版本号,例如 libGL.so.1、libGL.so.1.2.0、libGL.so.1.3.1 等,但是 Qt 在链接阶段查找的 OpenGL 链接库是不带版本号的。

总起来说,我们需要在 /usr/lib/ 目录下为 OpenGL 链接库创建一个链接,并去掉版本号。

如果你不知道当前 Linux 系统中 libGL.so 的具体路径,可以使用locate libGL命令find /usr -name "libGL*"命令查找,然后使用ln -s创建链接。请看下面的演示:

查找 libGL 所在位置

Linux 系统中可能存在多个版本的 libGL.so,为任意一个版本创建链接即可。

lotoze@Lotoze-Ubuntu-PC~$ locate libGL
/usr/lib64/libGL.so
/usr/lib64/libGL.so.1
/usr/lib64/libGL.so.1.2.0
/usr/share/doc/mesa-libGL-9.2.5
/usr/share/doc/mesa-libGL-9.2.5/COPYING

创建软连接

lotoze@Lotoze-Ubuntu-PC~$ sudo ln -s /usr/lib64/libGL.so.1 /usr/lib/libGL.so
123456789

完成以上操作,再次启动 Qt,然后编译或者运行,就不会出现“cannot find -lGL”错误了。

image.png

结语

又是码代码的一天~

如果有任何疑问欢迎评论和私信; 求关注小.jpg