問題
之前的conda環境好好地,最近不知為何被破壞了,運作即報錯:
/miniconda3/opt/lib/R/bin/exec/R: /miniconda3/opt/lib/R/bin/exec/../../lib/../../libgomp.so.1: version `GOMP_4.0' not found (required by /miniconda3/opt/lib/R/bin/exec/../../lib/libR.so)
/miniconda3/opt/lib/R/bin/exec/R: /miniconda3/opt/lib/R/bin/exec/../../lib/../.././libstdc++.so.6: version `CXXABI_1.3.8' not found (required by /miniconda3/opt/lib/R/bin/exec/../../lib/../../libicuuc.so.68)
/miniconda3/opt/lib/R/bin/exec/R: /miniconda3/opt/lib/R/bin/exec/../../lib/../.././libstdc++.so.6: version `CXXABI_1.3.9' not found (required by /miniconda3/opt/lib/R/bin/exec/../../lib/../../libicuuc.so.68)
/miniconda3/opt/lib/R/bin/exec/R: /miniconda3/opt/lib/R/bin/exec/../../lib/../.././libstdc++.so.6: version `CXXABI_1.3.8' not found (required by /miniconda3/opt/lib/R/bin/exec/../../lib/../../libicui18n.so.68)
/miniconda3/opt/lib/R/bin/exec/R: /miniconda3/opt/lib/R/bin/exec/../../lib/../.././libstdc++.so.6: version `CXXABI_1.3.9' not found (required by /miniconda3/opt/lib/R/bin/exec/../../lib/../../libicui18n.so.68)
原因
conda對應目錄下的“libgomp.so.1”和“libstdc++.so.6”動态庫檔案(lib)中相關子產品的版本比較舊,不包含相應版本子產品導緻的。
系統中動态庫存放路徑在:/usr/lib/x86_64-linux-gnu/ 或 /usr/lib/ 或 /usr/lib64/。
anaconda中動态庫存放路徑是:~/anaconda2/lib。
如果系統版本高,則用它替換掉anaconda中的低版本,否則更新。
檢視這兩個路徑下庫的版本:
strings /usr/lib/libstdc++.so.6 | grep 'CXXABI'
strings /miniconda3/opt/lib/R/bin/exec/../../lib/../.././libstdc++.so.6 | grep 'CXXABI'
##都是下面這幾個
CXXABI_1.3
CXXABI_1.3.1
CXXABI_1.3.2
CXXABI_1.3.3
CXXABI_1.3.4
CXXABI_1.3.5
CXXABI_1.3.6
CXXABI_1.3.7
CXXABI_TM_1
我的系統中的libgomp.so.1可以直接複制替換掉anaconda中的libgomp.so.1,而libstdc++.so.6沒作用,因為兩者一樣。
那麼需要更新系統的libstdc++.so.6。
解決
下載下傳libstdc++.so.6.0.26
連結: https://pan.baidu.com/s/1qqXBMxmKMDpp-jycRnHyMQ 提取碼: bv88
将檔案移動到系統目錄/usr/lib64/下面。
ll libstdc++.so*
chmod +x libstdc++.so.6.0.26
mv libstdc++.so.6 libstdc++.so.6.bak
ln -s libstdc++.so.6.0.26 libstdc++.so.6
strings /usr/lib64/libstdc++.so.6 | grep CXXABI
這時已經更新:
CXXABI_1.3
CXXABI_1.3.1
CXXABI_1.3.2
CXXABI_1.3.3
CXXABI_1.3.4
CXXABI_1.3.5
CXXABI_1.3.6
CXXABI_1.3.7
CXXABI_1.3.8
CXXABI_1.3.9
CXXABI_1.3.10
CXXABI_1.3.11
CXXABI_1.3.12
CXXABI_TM_1
CXXABI_FLOAT128
CXXABI_1.3
CXXABI_1.3.11
CXXABI_1.3.2
CXXABI_1.3.6
CXXABI_FLOAT128
CXXABI_1.3.12
CXXABI_1.3.9
CXXABI_1.3.1
CXXABI_1.3.5
CXXABI_1.3.8
CXXABI_1.3.4
CXXABI_TM_1
CXXABI_1.3.7
CXXABI_1.3.10
CXXABI_1.3.3
直接将系統中的libstdc++.so.6複制替換掉anaconda中的libstdc++.so.6即可。