1. 程式人生 > 其它 >Linux Qt cannot find -lGL錯誤解決辦法(親測有效)

Linux Qt cannot find -lGL錯誤解決辦法(親測有效)

技術標籤:Qt

對於很多 Linux 發行版本,Qt 安裝完成後如果直接編譯或者執行專案,會出現“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.1、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建立連結。請看下面的演示:

#查詢 libGL 所在位置

[[email protected]
~]# locate libGL /usr/lib/libGL.so.1.2.0 /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/mesa/libGL.so.1.2.0 /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1 /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0

#建立連結

[[email protected] ~]# ln -s /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1 /usr/lib/libGL.so

Linux 系統中可能存在多個版本的 libGL.so,為任意一個版本建立連結即可。普通使用者沒有許可權建立連結,所以我使用了 root 使用者。

完成以上操作,再次啟動 Qt,然後編譯或者執行,就不會出現“cannot find -lGL”錯誤了。