cannot find -lGL

對於不少 Linux 發行版本,Qt 安裝完成後若是直接編譯或者運行項目,會出現「cannot find -lGL」錯誤,以下圖所示:html

cannot find -lGL


這是由於 Qt 找不到 OpenGL 的動態連接庫(libGL.so)。在《Linux Qt安裝》一節中咱們說過,OpenGL 在大部分 Linux 發行版中都是默認安裝的,包括 Ubuntu、CentOS 等,找不到該連接庫通常都是路徑不對。

Qt 默認在 /usr/lib/ 目錄下查找動態連接庫,可是不少 Linux 發行版將 OpenGL 連接庫放在其它目錄,例如我使用的是 CentOS 7,OpenGL 連接庫位於 /usr/lib64/ 目錄,而對於 Ubuntu,OpenGL 連接庫位於 /usr/lib/i386-linux-gnu/mesa/ 目錄。只要咱們把 libGL.so 拷貝到 /usr/lib/ 目錄,或者在 /usr/lib/ 目錄下爲 libGL.so 建立一個連接,就能解決問題。顯然第二種辦法更好。

另外,Linux 發行版自帶的 OpenGL 連接庫在後綴中添加了版本號,例如 libGL.so.一、libGL.so.1.2.0、libGL.so.1.3.1 等,可是 Qt 在連接階段查找的 OpenGL 連接庫是不帶版本號的。

總起來講,咱們須要在 /usr/lib/ 目錄下爲 OpenGL 連接庫建立一個連接,並去掉版本號。

若是你不知道當前 Linux 系統中 libGL.so 的具體路徑,可使用locate libGL命令或find /usr -name libGL*命令查找,而後使用ln -s建立連接。請看下面的演示:linux

#查找 libGL 所在位置
[root@localhost ~]# locate libGL
/usr/lib64/libGL.so
/usr/lib64/libGL.so.1
/usr/lib64/libGL.so.1.2.0
/usr/share/doc/mesa-libGL-9.2.5
/usr/share/doc/mesa-libGL-9.2.5/COPYING

#建立連接
[root@localhost ~]# ln -s /usr/lib64/libGL.so.1 /usr/lib/libGL.so.net

Linux 系統中可能存在多個版本的 libGL.so,爲任意一個版本建立連接便可。普通用戶沒有權限建立連接,因此我使用了 root 用戶。

完成以上操做,再次啓動 Qt,而後編譯或者運行,就不會出現「cannot find -lGL」錯誤了。code

相關文章
相關標籤/搜索