http://c.biancheng.net/view/3901.html
對於很多 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 所在位置
[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
Linux 系統中可能存在多個版本的 libGL.so,為任意一個版本創建鏈接即可。普通用戶沒有權限創建鏈接,所以我使用了 root 用戶。
完成以上操作,再次啟動 Qt,然后編譯或者運行,就不會出現“cannot find -lGL”錯誤了。