在Linux系统下安装好Qt5,打开Qt Creator新建一个最简单的工程,编译却出现"cannot find -lGL"错误。
在网上搜索解决方法,找到的方案一:执行apt-get install libglu1-mesa-dev
glen@ubuntu:~/linux/Qt$ sudo apt-get install libglu1-mesa-dev
正在读取软件包列表... 完成
正在分析软件包的依赖关系树... 完成
正在读取状态信息... 完成
有一些软件包无法被安装。如果您用的是 unstable 发行版,这也许是
因为系统无法达到您要求的状态造成的。该版本中可能会有一些您需要的软件
包尚未被创建或是它们已被从新到(Incoming)目录移出。
下列信息可能会对解决问题有所帮助:
下列软件包有未满足的依赖关系:
libglu1-mesa-dev : 依赖: libglu1-mesa (= 9.0.1-1build1) 但是 9.0.2-1 正要被安装
依赖: libgl1-mesa-dev 但是它将不会被安装 或
libgl-dev 但是它将不会被安装
E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。
发现提示信息中依赖libgl1-mesa-dev,于是执行apt-get install libglu1-mesa-dev
glen@ubuntu:~/linux/Qt$ sudo apt-get install libgl1-mesa-dev
正在读取软件包列表... 完成
正在分析软件包的依赖关系树... 完成
正在读取状态信息... 完成
有一些软件包无法被安装。如果您用的是 unstable 发行版,这也许是
因为系统无法达到您要求的状态造成的。该版本中可能会有一些您需要的软件
包尚未被创建或是它们已被从新到(Incoming)目录移出。
下列信息可能会对解决问题有所帮助:
下列软件包有未满足的依赖关系:
libgl-dev : 依赖: libgl1 (= 1.3.2-1~ubuntu0.20.04.2) 但是 1.4.0-1 正要被安装
依赖: libglx-dev 但是它将不会被安装
libglvnd-dev : 依赖: libglvnd0 (= 1.3.2-1~ubuntu0.20.04.2) 但是 1.4.0-1 正要被安装
依赖: libegl-dev (>= 1.3.0-1) 但是它将不会被安装
依赖: libgles-dev (>= 1.3.0-1) 但是它将不会被安装
依赖: libglx-dev (>= 1.3.0-1) 但是它将不会被安装
依赖: libopengl-dev (>= 1.3.0-1) 但是它将不会被安装
E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。
问题也没解决。搜索发现aptitude命令并尝试安装libglu1-mesa-dev
glen@ubuntu:~/linux/Qt/build-Test-GLEN_IMX6U-Debug$ sudo aptitude install libglu1-mesa-dev
下列“新”软件包将被安装。
libglu1-mesa-dev{b}
0 个软件包被升级,新安装 1 个,0 个将被删除, 同时 1 个将不升级。
需要获取 207 kB 的存档。解包后将要使用 998 kB。
下列软件包存在未满足的依赖关系:
libglu1-mesa-dev : 依赖: libglu1-mesa (= 9.0.1-1build1) 但是 9.0.2-1 已安装
依赖: libgl1-mesa-dev 但它是不可安装的 或者
libgl-dev 但它是不可安装的
下列动作将解决这些依赖关系:
保持 下列软件包于其当前版本:
1) libglu1-mesa-dev [未安装的]
是否接受该解决方案?[Y/n/q/?] y
将不会安装,升级或者删除任何软件包。
0 个软件包被升级,新安装 0 个,0 个将被删除, 同时 1 个将不升级。
需要获取 0 B 的存档。解包后将要使用 0 B。
当前状态:80422 (+2) new。
问题仍没有解决,于是想到是不是Ubuntu版本太高了,想降级到Ubuntu18.04,结果也失败了。有些不甘心重装系统,重新搜索cannot find -lGL,找到了这篇文章 https://www.jianshu.com/p/e1b2511c7cda ,即方案二:搜索系统中已经存在的libgl1-mesa-dev相关文件,使用find /usr -name libGL*命令搜索(libgl1-mesa-dev是有关OpenGL的库)
glen@ubuntu:~/linux/Qt$ find /usr -name libGL*
/usr/share/code/libGLESv2.so
/usr/lib/libGL.so.bak
/usr/lib/x86_64-linux-gnu/libGLESv2.so.2.1.0
/usr/lib/x86_64-linux-gnu/libGL.so.1
/usr/lib/x86_64-linux-gnu/libGLU.so.1.3.1
/usr/lib/x86_64-linux-gnu/libGLX_mesa.so.0.0.0
/usr/lib/x86_64-linux-gnu/libGLX.so.0.0.0
/usr/lib/x86_64-linux-gnu/libGLX_indirect.so.0
/usr/lib/x86_64-linux-gnu/libGLESv2.so.2
/usr/lib/x86_64-linux-gnu/libGL.so.1.7.0
/usr/lib/x86_64-linux-gnu/libGLU.so.1
/usr/lib/x86_64-linux-gnu/libGLX.so.0
/usr/lib/x86_64-linux-gnu/libGLX_mesa.so.0
/usr/lib/x86_64-linux-gnu/libGLdispatch.so.0.0.0
/usr/lib/x86_64-linux-gnu/libGLdispatch.so.0
搜索结果中发现/usr/lib/x86_64-linux-gnu/libGL.so.1文件(这个文件也可能在另一个目录中)。然后使用ln -s /usr/lib/x86_64-linux-gnu/libGL.so.1 /usr/lib/libGL.so命令给已存在的库文件创建一个链接到/usr/lib目录。
glen@ubuntu:~/linux/Qt$ ln -s /usr/lib/x86_64-linux-gnu/libGL.so.1 /usr/lib/libGL.so
glen@ubuntu:~/linux/Qt$ ls /usr/lib/libGL.so -ll
lrwxrwxrwx 1 root root 36 10月 24 22:54 /usr/lib/libGL.so -> /usr/lib/x86_64-linux-gnu/libGL.so.1
然后在Qt Creator中再次编译工程,错误消失。
不过编译出现了以下警告:
Qt Warning: Ignoring XDG_SESSION_TYPE=wayland on Gnome. Use QT_QPA_PLATFORM=wayland to run on Wayland anyway.
按如下修改:
sudo vi /etc/gdm3/custom.conf
# GDM configuration storage
#
# See /usr/share/gdm/gdm.schemas for a list of available options.
[daemon]
# Uncomment the line below to force the login screen to use Xorg
# WaylandEnable=false
# Enabling automatic login
# AutomaticLoginEnable = true
# AutomaticLogin = user1
# Enabling timed login
# TimedLoginEnable = true
# TimedLogin = user1
# TimedLoginDelay = 10
把 #WaylandEnable=false 这行注释符#删除,重启系统,警告消除。