解決can't find -lGL的問題

mjiansun發表於2017-03-05

轉自:http://blog.csdn.net/tingyue_/article/details/53463563

實驗問題:執行最簡單”hello world!”,出現can’t find -lGL的問題
實驗陣地: ubuntu14.04+qt5.2

問題分析
出現該類問題的原因有2個:
(1)沒有安裝libGL;
(2)libGL沒有正確連結。

問題解答
(1)如果是問題1,這個好辦。只要安裝libGL即可。這個在其他部落格中也都有提到。
http://blog.sina.com.cn/s/blog_500bd63c0102uzmt.html
只需終端執行

$sudo apt-get install build-essential 
$sudo apt-get install libgl1-mesa-dev

安裝libGL即可。(libGL是openGL的庫)
(2)如果是問題2,就稍微難辦一點。
首先,我們利用命令

$/sbin/ldconfig -v | grep GL

檢視所有有關GL的連結庫的連結關係。
如果是問題2,則會有這樣的列印資訊

/sbin/ldconfig.real: Cannot stat /usr/lib/x86_64-linux-gnu/mesa/libGL.so: No such file or directory

表示”無法獲取libGL的連結資訊:沒有該檔案或目錄”。我們進入/usr/lib/x86_64-Linux-gnu/mesa/

$cd /usr/lib/x86_64-linux-gnu/mesa/

確實能找到libGL.so。但因為不存在與之相關的硬連結,而導致libGL.so失效。
這時候,應該怎麼辦呢?
a)首先我們進一步確認一下libGL.so是否失效。(畢竟之後涉及到在/usr/lib/x86_64-linux-gnu資料夾下刪除,一不小心刪錯了,可是要命的)

$ls -l libGL.so 

檢視libGL的硬連結,如果libGL存在硬連結的話,會出現類似資訊:

lrwxrwxrwx 1 root root 13 12月  4 20:42 libGL.so -> ../libGL.so.1

如果出現

0 libGL.so

或其他錯誤資訊,則說明這個libGL.so已經失效。
b)之後,搜尋是否存在libGL.so的硬連結。(一般如果第一步,安裝已經做過的話,是肯定存在的)

$cd 
$sudo find /usr/lib/ -name libGL.so*

列印資訊

/usr/lib/x86_64-linux-gnu/mesa/libGL.so
/usr/lib/x86_64-linux-gnu/libGL.so.1.0.0
/usr/lib/x86_64-linux-gnu/libGL.so
/usr/lib/x86_64-linux-gnu/libGL.so.1

我們發現在/usr/lib/x86_64-linux-gnu/資料夾下存在硬連結libGL.so.1.0.0
接下來,我們的問題就只剩下如何讓/usr/lib/x86_64-linux-gnu/mesa/libGL.so關聯上/usr/lib/x86_64-linux-gnu/libGL.so.1.0.0
由於在/usr/lib/x86_64-linux-gnu/中libGL.so.1是libGL.so.1.0.0的軟連結,所以我們只要將/usr/lib/x86_64-linux-gnu/mesa/libGL.so關聯上/usr/lib/x86_64-linux-gnu/libGL.so.1即可
執行以下操作

$cd /usr/lib/x86_64-linux-gnu/mesa/
$sudo rm libGL.so #刪除libGL.so
$sudo ln -s ../libGL.so.1 libGL.so #建立軟連結

重新執行

ls -l libGL.so

這時應該會有列印資訊

lrwxrwxrwx 1 root root 13 12月  4 20:42 libGL.so -> ../libGL.so.1

再次執行

$/sbin/ldconfig -v | grep GL

錯誤

/sbin/ldconfig.real: Cannot stat /usr/lib/x86_64-linux-gnu/mesa/libGL.so: No such file or directory

會消失。
重新編譯qt,編譯成功!

相關文章