歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux技術 >> 解決Linux下Qt編譯出現cannot find

解決Linux下Qt編譯出現cannot find

日期:2017/3/3 13:51:35   编辑:Linux技術

在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。

Copyright © Linux教程網 All Rights Reserved