2021-05-12 14:32:11
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。
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
相關文章