解决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.从 ...
 
随机推荐
- 两年.net码农总结
			
一直都是在博客园看文章,几乎每个两三天都会来,不管是看技术分享还是看经验总结,我觉得这真是个好地方. 工作两年,24.5岁,目前达到8.5K(即10W)的.net web. 文章水平不好,各位见谅了, ...
 - ext中grid根据数据不同显示不同样式
			
核心代码: var clsRender = function(value){ if (value == 'male') { return "<span style='color:red ...
 - DHCP服务洪水攻击
			
1.攻击原理 动态主机设置协议是一个局域网的网络协议,使用UDP协议工作,主要有两个用途: 为内部网络或网络服务供应商自动分配IP地址给用户,以作为内部网络管理员对所有计算机做中央管理的手段. 在正常 ...
 - Java基础编程题——素数
			
package com.yangzl.basic; /** * 判断101-200之间有多少个素数,并输出所有素数. * @author Administrator * */ /*程序分析:判断素数的 ...
 - C# 摇奖机实例(线程)
			
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
 - Failed to load or instantiate TagLibraryValidator class: org.apache.taglibs.standard.tlv.JstlCoreTLV
			
今天在使用JSP,引入<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> ...
 - 关于Linux 虚拟机如何才能ping 通外网
			
需要虚拟机能够联网.以前都是用桥接模式让虚拟机跟主机通信,这几天查了好多资料,都没有写得很详细,自己捣鼓了很久,把步骤写下来吧. 虚拟机操作步骤: 点击虚拟机的“菜单栏”上的“编辑”,再点击“虚拟网络 ...
 - try 、catch 、finally  、throw 测试js错误
			
try语句允许我们定义在执行时进行错误测试的代码块. catch 语句允许我们定义当 try 代码块发生错误时,所执行的代码块. finally 语句在 try 和 catch 之后无论有无异常都会执 ...
 - Spring之JDBCTemplate学习
			
一.Spring对不同的持久化支持: Spring为各种支持的持久化技术,都提供了简单操作的模板和回调 ORM持久化技术 模板类 JDBC org.springframework.jdbc.core. ...
 - LibreOJ 题解汇总
			
目录 #1. A + B Problem #2. Hello, World! #3. Copycat #4. Quine #7. Input Test #100. 矩阵乘法 #101. 最大流 #10 ...