在Linux系統(tǒng)下安裝好Qt5,打開Qt Creator新建一個(gè)最簡(jiǎn)單的工程,編譯卻出現(xiàn)"cannot find -lGL"錯(cuò)誤。
在網(wǎng)上搜索解決方法,找到的方案基本上是安裝libgl1-mesa-dev,如通過apt-get install libgl1-mesa-dev安裝,但是在我自己的系統(tǒng)上嘗試這條命令,無(wú)論怎么安裝都會(huì)出現(xiàn)一大堆依賴錯(cuò)誤,按照缺少的依賴一個(gè)個(gè)嘗試安裝,結(jié)果只會(huì) 出現(xiàn)越來(lái)越多的依賴錯(cuò)誤。在Ubuntu軟件中心下載libgl1-mesa-dev的deb包也是無(wú)法安裝的,同樣是一大堆依賴錯(cuò)誤。如果使用aptitude命令嘗試安裝libgl1-mesa-dev,則aptitude給出的解決依賴錯(cuò)誤的方案竟然是將ubuntu-desktop和xorg等軟件刪除!這樣在libgl1-mesa-dev以后,你的Linux系統(tǒng)將會(huì)無(wú)法再開機(jī)!我因?yàn)榘惭blibgl1- mesa-dev使我的Linux系統(tǒng)崩潰了數(shù)次。
后來(lái)找到的另外一個(gè)方法是,搜索系統(tǒng)中已經(jīng)存在的libgl1-mesa-dev相關(guān)文件。libgl1-mesa-dev是有關(guān)OpenGL的庫(kù)。
使用
locate libGL
命令或find /usr -name libGL*
命令搜索。搜索結(jié)果中發(fā)現(xiàn)
/usr/lib/i386-linux-gnu/mesa/libGL.so.1
文件(這個(gè)文件也可能在另一個(gè)目錄中)。然后使用
ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/libGL.so
命令給已存在的庫(kù)文件創(chuàng)建一個(gè)鏈接到/usr/lib目錄。然后在Qt Creator中再次編譯工程,錯(cuò)誤消失。
但是如果在代碼中加入其他Qt模塊,如include <QtGui> <QtWidgets>等,將會(huì)出現(xiàn)新問題:找不到GL/gl.h文件。
通過追蹤錯(cuò)誤來(lái)源,發(fā)現(xiàn)在QtGui模塊的頭文件中有包含GL/gl.h的部分,此時(shí)在include <QtGui> <QtWidgets>等命令前加上#define QT_NO_OPENGL,則可解決問題。
最后分析,一開始Qt找不到的庫(kù)文件是OpenGL的庫(kù),而Qt默認(rèn)包含了OpenGL庫(kù),因此在沒有安裝OpenGL庫(kù)時(shí)編譯Qt程序,則會(huì)出現(xiàn) 錯(cuò)誤。而無(wú)法安裝libgl1-mesa-dev,有可能與系統(tǒng)中已經(jīng)存在的OpenGL相關(guān)文件沖突有關(guān)。此問題出現(xiàn)在虛擬機(jī)Ubuntu中,在真機(jī)上 的Linux系統(tǒng)暫時(shí)沒有遇到。個(gè)人猜測(cè)有可能與Vmware tools有關(guān),因?yàn)槲矣龅降牧硪粋€(gè)gtk的lib依賴錯(cuò)誤也似乎與它有關(guān),Vmware tools程序中包含一些與顯示有關(guān)的驅(qū)動(dòng),不知道這是不是造成沖突的原因。如果需要同時(shí)開發(fā)Qt和OpenGL的,又遇到了這個(gè)問題的話,建議重新安裝 一次Linux系統(tǒng),并在安裝Vmware tools之前謹(jǐn)慎考慮,再嘗試安裝Qt和libgl1-mesa-dev。