Linux下Qt編譯出現(xiàn)“cannot find -lGL”及無法安裝libgl1-mesa-dev解決

在Linux系統(tǒng)下安裝好Qt5,打開Qt Creator新建一個最簡單的工程,編譯卻出現(xiàn)"cannot find -lGL"錯誤。


在網(wǎng)上搜索解決方法,找到的方案基本上是安裝libgl1-mesa-dev,如通過apt-get install libgl1-mesa-dev安裝,但是在我自己的系統(tǒng)上嘗試這條命令,無論怎么安裝都會出現(xiàn)一大堆依賴錯誤,按照缺少的依賴一個個嘗試安裝,結(jié)果只會 出現(xiàn)越來越多的依賴錯誤。在Ubuntu軟件中心下載libgl1-mesa-dev的deb包也是無法安裝的,同樣是一大堆依賴錯誤。如果使用aptitude命令嘗試安裝libgl1-mesa-dev,則aptitude給出的解決依賴錯誤的方案竟然是將ubuntu-desktop和xorg等軟件刪除!這樣在libgl1-mesa-dev以后,你的Linux系統(tǒng)將會無法再開機(jī)!我因為安裝libgl1- mesa-dev使我的Linux系統(tǒng)崩潰了數(shù)次。
后來找到的另外一個方法是,搜索系統(tǒng)中已經(jīng)存在的libgl1-mesa-dev相關(guān)文件。libgl1-mesa-dev是有關(guān)OpenGL的庫。
使用locate libGL命令或find /usr -name libGL*命令搜索。
搜索結(jié)果中發(fā)現(xiàn)/usr/lib/i386-linux-gnu/mesa/libGL.so.1文件(這個文件也可能在另一個目錄中)。
然后使用ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/libGL.so命令給已存在的庫文件創(chuàng)建一個鏈接到/usr/lib目錄。

然后在Qt Creator中再次編譯工程,錯誤消失。

但是如果在代碼中加入其他Qt模塊,如include <QtGui> <QtWidgets>等,將會出現(xiàn)新問題:找不到GL/gl.h文件。

通過追蹤錯誤來源,發(fā)現(xiàn)在QtGui模塊的頭文件中有包含GL/gl.h的部分,此時在include <QtGui> <QtWidgets>等命令前加上#define QT_NO_OPENGL,則可解決問題。

最后分析,一開始Qt找不到的庫文件是OpenGL的庫,而Qt默認(rèn)包含了OpenGL庫,因此在沒有安裝OpenGL庫時編譯Qt程序,則會出現(xiàn) 錯誤。而無法安裝libgl1-mesa-dev,有可能與系統(tǒng)中已經(jīng)存在的OpenGL相關(guān)文件沖突有關(guān)。此問題出現(xiàn)在虛擬機(jī)Ubuntu中,在真機(jī)上 的Linux系統(tǒng)暫時沒有遇到。個人猜測有可能與Vmware tools有關(guān),因為我遇到的另一個gtk的lib依賴錯誤也似乎與它有關(guān),Vmware tools程序中包含一些與顯示有關(guān)的驅(qū)動,不知道這是不是造成沖突的原因。如果需要同時開發(fā)Qt和OpenGL的,又遇到了這個問題的話,建議重新安裝 一次Linux系統(tǒng),并在安裝Vmware tools之前謹(jǐn)慎考慮,再嘗試安裝Qt和libgl1-mesa-dev。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容