
我運行此命令後dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P
我在開啟 smplayer、cairo-dock、unity-2d-shell 和 amdconfig 時遇到問題,「載入共用程式庫時出錯:libGL.so.1:無法開啟共用物件檔案:沒有這樣的檔案或目錄」。也許還有其他應用程式會遇到同樣的問題。
但我確實有文件
locate libGL.so.1
/usr/lib/FGL.renamed.libGL.so.1.2
/usr/lib/libGL.so.1
/usr/lib/libGL.so.1.2
/usr/lib/i386-linux-gnu/libGL.so.1
/usr/lib/i386-linux-gnu/libGL.so.1.2
/usr/lib/i386-linux-gnu/fglrx/fglrx-libGL.so.1.2
/usr/lib/i386-linux-gnu/mesa/FGL.renamed.libGL.so.1.2
/usr/lib/x86_64-linux-gnu/mesa/FGL.renamed.libGL.so.1.2
/usr/lib32/libGL.so.1
/usr/lib32/libGL.so.1.2
ldd $(which unity-2d-shell)|grep libGL
libGL.so.1 => not found
ldd $(which mplayer)|grep not
libGL.so.1 => not found
但
ldd $(which smplayer)|grep libGL
什麼也沒得到。
答案1
@Braiam 說得對。您還應該知道,找到一個文件locate
並不意味著它存在。locate
使用不時刷新的資料庫。它不搜尋實際的檔案系統,而是搜尋資料庫。您可以updatedb
在搜尋之前執行刷新資料庫或使用該-e
標誌:
-e, --existing
Print only entries that refer to files existing at the time locate is run.
例如:
$ touch stupid_stupid_file.txt
$ locate stupid_stupid_file.txt ## No results
$ sudo updatedb ## refresh database
$ locate stupid_stupid_file.txt
/home/terdon/stupid_stupid_file.txt ## the file was found after updatedb
$ rm stupid_stupid_file.txt ## delete the file
$ locate stupid_stupid_file.txt
/home/terdon/stupid_stupid_file.txt ## the file is still in the database
$ locate -e stupid_stupid_file.txt ## the file is not found using -e
答案2
這可能是因為當您一次卸載多個軟體包時某些連結庫被破壞。你應該dpkg -l |grep ^rc|awk '{print $2}'
事先跑一下才能知道會發生什麼事。幸運的是,這可以使用 來解決sudo ldconfig
。這將重新建立連結庫快取並(希望)修復您的庫。
當然,只有當您確實/usr/lib/libGL.so.1
安裝了該庫時,這才有效:
ls -l /usr/lib/x86_64-linux-gnu/libGLU.so.1
lrwxrwxrwx 1 root root 15 sep 18 14:03 /usr/lib/x86_64-linux-gnu/libGLU.so.1 -> libGLU.so.1.3.1
dpkg -S libGL.so.1
libgl1-mesa-glx:i386: /usr/lib/i386-linux-gnu/mesa/libGL.so.1
libgl1-mesa-glx:amd64: /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1
libgl1-mesa-glx:i386: /usr/lib/i386-linux-gnu/mesa/libGL.so.1.2.0
libgl1-mesa-glx:amd64: /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0
(我的是 64 位,這就是差異的原因。)