Linux下Qt编译出现“cannot find -lGL”及无法安装libgl1-mesa-dev解决

13 篇文章 1 订阅

http://www.linuxidc.com/Linux/2016-05/131040.htm



在Linux系统下安装好Qt5,打开Qt Creator新建一个最简单的工程,编译却出现"cannot find -lGL"错误。

在网上搜索解决方法,找到的方案基本上是安装libgl1-mesa-dev,如通过apt-get install libgl1-mesa-dev安装,但是在我自己的系统上尝试这条命令,无论怎么安装都会出现一大堆依赖错误,按照缺少的依赖一个个尝试安装,结果只会 出现越来越多的依赖错误。在Ubuntu软件中心下载libgl1-mesa-dev的deb包也是无法安装的,同样是一大堆依赖错误。

如果使用aptitude命令尝试安装libgl1-mesa-dev,则aptitude给出的解决依赖错误的方案竟然是将ubuntu-desktop和xorg等软件删除!这样在libgl1-mesa-dev以后,你的Linux系统将会无法再开机!我因为安装libgl1- mesa-dev使我的Linux系统崩溃了数次。

后来找到的另外一个方法是,搜索系统中已经存在的libgl1-mesa-dev相关文件。libgl1-mesa-dev是有关OpenGL的库。

使用locate libGL命令或find /usr -name libGL*命令搜索。

搜索结果中发现/usr/lib/i386-linux-gnu/mesa/libGL.so.1文件(这个文件也可能在另一个目录中)。

然后使用ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/libGL.so命令给已存在的库文件创建一个链接到/usr/lib目录。

 

然后在Qt Creator中再次编译工程,错误消失。 

但是如果在代码中加入其他Qt模块,如include <QtGui> <QtWidgets>等,将会出现新问题:找不到GL/gl.h文件。 

通过追踪错误来源,发现在QtGui模块的头文件中有包含GL/gl.h的部分,此时在include <QtGui> <QtWidgets>等命令前加上#define QT_NO_OPENGL,则可解决问题。 

最后分析,一开始Qt找不到的库文件是OpenGL的库,而Qt默认包含了OpenGL库,因此在没有安装OpenGL库时编译Qt程序,则会出现 错误。而无法安装libgl1-mesa-dev,有可能与系统中已经存在的OpenGL相关文件冲突有关。此问题出现在虚拟机Ubuntu中,在真机上 的Linux系统暂时没有遇到。个人猜测有可能与Vmware tools有关,因为我遇到的另一个gtk的lib依赖错误也似乎与它有关,Vmware tools程序中包含一些与显示有关的驱动,不知道这是不是造成冲突的原因。如果需要同时开发Qt和OpenGL的,又遇到了这个问题的话,建议重新安装 一次Linux系统,并在安装Vmware tools之前谨慎考虑,再尝试安装Qt和libgl1-mesa-dev。

Qt入门学习——Qt 5 帮助文档的使用  http://www.linuxidc.com/Linux/2015-09/123102.htm

Ubuntu 环境下Gtk与QT编译环境安装与配置 http://www.linuxidc.com/Linux/2013-08/88539.htm

Linux系统下QT环境搭建 http://www.linuxidc.com/Linux/2013-07/87576.htm

Ubuntu下QT控制台程序无法运行的解决方案以及XTerm的配置方法 http://www.linuxidc.com/Linux/2013-06/86244.htm

Ubuntu 10.04下QT4.7.4移植详解 http://www.linuxidc.com/Linux/2013-01/77930.htm

Ubuntu 14.04下安装部署Qt5开发环境 http://www.linuxidc.com/Linux/2014-05/101774.htm

Qt 的详细介绍请点这里
Qt 的下载地址请点这里


遇到这个错误,通常是在尝试编译或运行依赖OpenGL(GL)库的应用程序时,找不到所需的动态链接库`libGL.so`。当你执行`-lGL`时,系统找不到该文件,导致编译器或链接器返回错误。解决这个问题通常涉及以下几个步骤: 1. **确认安装**: 首先,确认你的系统已经安装了Open GL的相关开发包。在Ubuntu或Debian类系统上,`libgl1-mesa-dev`是你需要的库之一。你可以通过命令行来检查: ```shell sudo apt-get check libgl1-mesa-dev ``` 2. **安装缺失包**: 如果`libgl1-mesa-dev`未安装,可以使用以下命令来安装它: ```shell sudo apt-get install libgl1-mesa-dev ``` 或者如果使用的是`aptitude`,则: ```shell sudo aptitude install libgl1-mesa-dev ``` 3. **更新编译选项**: 安装完成后,重新设置你的编译选项,确保链接器知道在哪里找到`libGL`。如果你正在构建一个C++项目,可能需要修改`CMakeLists.txt`或其他配置文件,添加 `-lGL` 到链接器选项里,如 `target_link_libraries(your_target_name GL)`。 4. **检查环境变量**: 确认`LD_LIBRARY_PATH`环境变量包含了`libGL`的路径。可以通过编辑`~/.bashrc`或`~/.bash_profile`,并添加: ```shell export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/x86_64-linux-gnu ``` 5. **重新编译**: 保存更改后,重启终端或运行`source ~/.bashrc`(取决于你的shell),然后重新编译你的应用程序。 完成以上操作后,你应该能够避免`cannot find -lGL`的错误了。如果问题依然存在,可能是其他依赖项或配置问题,需要进一步排查。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值