1. 使用現有新版函式庫假裝成舊版。
此種方法很簡單,只要把新版函式庫建立一個symbolic link就可以了,例如:
[/usr/lib]$ ln -s libstdc++.so.6 libstdc++.so.5
但是很不幸的這種作法是可能出問題的。
例如我今天就遇到了這個問題....
我的系統上裝有libstdc++.so.6,但我要執行的程式連結到的是libstdc++.so.5。所以我用類似以上的方式做了一個假的,結果在執行的時候,跳出訊息顯示,該程式需要CXXABI 1.2(其實我也不太清楚這是啥,只知道ABI是Application Binary Interface),我猜大概是ABI版本太新....沒辦法我動不到....orz 所以只好認命的去尋找舊版函式庫了...
2.安裝舊版函式庫
我在這篇文章找到做法,而且他寫得很簡單易懂:)
a. 先去Debian Packages抓取我要的套件的deb檔
$ wget http://debian.nctu.edu.tw/debian/pool/main/g/gcc-3.3/libstdc++5_3.3.6-18_amd64.deb
b. 解壓縮抓下來的檔案
$ dpkg-deb -x libstdc++5_3.3.6-18_amd64.deb libstdc++5
c. 把其中的函式庫放到/usr/lib中 (小心不要覆蓋到本來的檔案了)
$ sudo mv libstdc++5/usr/lib/libstdc++.so.5* /usr/lib/
d. 更新linker的cache
$ sudo ldconfig
完成了.....
照著這樣做是沒問題啦....只是我心中還有點疑惑,為什麼不直接安裝該deb套件就好?也許有其他什麼原因?
總而言之,要安裝缺少的library,只要找到相應的.so檔,並放到/usr/lib中(或是/usr/local/lib中),再更新ld的cache即可。
那....如果沒有.so可以抓怎麼辦?那就只好自己找source來編譯了.....那是另外一段故事:D
沒有留言:
張貼留言