解决Linux下Qt编译出现"cannot find -lGL"以及无法安装libgl1-mesa-dev的问题
在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。
解决Linux下Qt编译出现"cannot find -lGL"以及无法安装libgl1-mesa-dev的问题的更多相关文章
- 完美解决 Linux 下 Sublime Text 中文输入
首先,我参考了好几篇文章,都是蛮不错的,先列出来: sublime-text-imfix:首先推荐这个方法,最简单,但是在我的系统上有些问题.可用这个的强烈推荐用这个 完美解决 Linux 下 Sub ...
- Linux下Qt的安装与配置
参考资料:http://www.cnblogs.com/emouse/archive/2013/01/28/2880142.html Linux 下编译.安装.配置 QT 下载qt 这里用的是4.7. ...
- [转载]解决linux 下多线程错误 undefined reference to `sem_init'
转自:https://blog.csdn.net/yzycqu/article/details/7396498?utm_source=copy 解决linux 下多线程错误 undefined ref ...
- Qt5.5.0在Linux下静态编译(加上-fontconfig编译项才能显示中文) good
测试系统环境:Ubuntu12.04 (32bit/64bit)编译软件环境:QT5.5.0 本文章主要介绍Linux下QT静态编译环境的搭建,以及如何编译我们的程序board_driver. 1 ...
- 从四个问题透析Linux下C++编译&链接
摘要:编译&链接对C&C++程序员既熟悉又陌生,熟悉在于每份代码都要经历编译&链接过程,陌生在于大部分人并不会刻意关注编译&链接的原理.本文通过开发过程中碰到的四个典型 ...
- Solaris 10下Qt编译Oracle 10g驱动
上回书讲到<Oracle 10g在Solaris 10中安装详解>,现在开始用Qt来编译下Oracle 10g驱动吧!这样就可以通过Qt程序联入Oracle数据库了! Oracle的环境变 ...
- 解决linux下javac -version和java -version版本显示不一致
解决linux下javac -version和java -version版本显示不一致 [javascript] view plaincopy [root@localhost usr]# $JAVA_ ...
- LINUX下文件编译
body, table{font-family: 微软雅黑} table{border-collapse: collapse; border: solid gray; border-width: 2p ...
- ACE-6.1.0 linux 下的编译与安装步骤
ACE-6.1.0 linux 下的编译与安装步骤 引用至http://www.cnblogs.com/liangxiaxu/archive/2013/03/07/2948417.html 1.从 ...
随机推荐
- Neo4j安装&入门&一些优缺点
本篇将介绍Neo4j的安装,入门,和自己使用了一段时间后发现的优点缺点,争取简洁和实用. 如果你是第一次接触Neo4j,并且之前也都没接触过类似的Graph Database的话,建议先浏览一下我之前 ...
- .NET面试题系列(十五)yong
Redis为什么使用单进程单线程方式也这么快 Redis遍历所有key的两个命令 -- KEYS 和 SCAN 一致性Hash算法 利用一致性哈希水平拆分MySql单表 单例模式 锁 双重锁 单例模 ...
- # 20155337 2016-2017-2 《Java程序设计》第八周学习总结
20155337 2016-2017-2 <Java程序设计>第八周学习总结 教材学习内容总结 第14章 NIO与NIO2 NIO简介 NIO使用频道来衔接数据结点,在处理数据时,NIO可 ...
- luogu P3978 [TJOI2015]概率论
看着就是要打表找规律 使用以下代码 for(int i=3;i<=20;i++) { int a1=0,a2=0; for(int j=1;j<i;j++) { for(int k=0;k ...
- 啊金学习javascript系列一之javascript整体印象
javascript是一门编程语言,这个是第一个观点.是编程语言,那就拥有编程语言的功能.在我理解之中,编程语言是和计算机打交道的语言,就是我们跟计算机说话用的语言,是用来指挥计算机的.人类能够理解语 ...
- jQuery - 字符串与json对象之间的转换
将字符串转换为json 在js中,我们是这样写的 var _data = eval('(' + data + ')'); 原理:eval() 函数可计算某个字符串,并执行其中的的 JavaScript ...
- 子元素应该margin-top为何会影响父元素【转】
这个问题困惑了很久,虽然没有大碍早就摸出来怎么搞定它,但始终不明白原因出在哪里,如果只是IE有问题我也不会太在意,可问题是所有上等浏览器都表现如此,这样叫我怎能安心?今天总算下狠心查出来怎么回事,居然 ...
- 【Linux】Linux下统计当前文件夹下的文件个数、目录个数
统计当前文件夹下文件的个数,包括子文件夹里的 ls -lR|grep "^-"|wc -l 统计文件夹下目录的个数,包括子文件夹里的 ls -lR|grep "^d&qu ...
- Windows系统FTP Shell
ftp open 10.0.0.0.2 21101 user passwd ls cd pwd delete get /home/err.log Error.log put err.log /home ...
- Project Euler Problem7
10001st prime Problem 7 By listing the first six prime numbers: 2, 3, 5, 7, 11, and 13, we can see t ...