天天看點

Ubuntu系統anaconda報錯version `GLIBCXX_3.4.30' not found

================================================

在anaconda中安裝deepmind_lab子產品,安裝過程并沒有報錯,運作代碼時報錯:

Ubuntu系統anaconda報錯version `GLIBCXX_3.4.30' not found

具體錯誤資訊:

/home/devil/anaconda3/envs/impala/bin/../lib/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /lib/x86_64-linux-gnu/libLLVM-13.so.1)

根據錯誤資訊可以知道運作時調用C++标準庫報錯,顯示的被調用的C++标準庫位址為:

/home/devil/anaconda3/envs/impala/lib/libstdc++.so.6

也就是說在anaconda建立的python環境中預設調用的庫位址首先是自身環境的lib路徑,那麼我們可以看看在目前系統中一共有多少個C++标準庫libstdc++.so.6檔案:

sudo find / -name libstdc++.so.6

Ubuntu系統anaconda報錯version `GLIBCXX_3.4.30' not found

可以看到系統中C++标準庫libstdc++.so.6檔案有多個,基本是每個獨立性較高的程式都在自己的環境路徑下有個libstdc++.so.6檔案,是以這樣是因為不同的libstdc++.so.6檔案可能内部的GLIBCXX版本并不相同,是以一些不需要從源碼編譯的軟體就會采用這種方式,把符合自身版本需要的libstdc++.so.6檔案放在自身的庫路徑下,這樣在調用的時候會優先調用自身帶有的libstdc++.so.6檔案而不是系統自帶的。

我們可以看下系統libstdc++.so.6檔案中支援的GLIBCXX版本:

strings  /usr/lib/x86_64-linux-gnu/libstdc++.so.6   | grep GLIBC

Ubuntu系統anaconda報錯version `GLIBCXX_3.4.30' not found

我們再看下anaconda環境下libstdc++.so.6檔案中支援的GLIBCXX版本:

strings /home/devil/anaconda3/envs/impala/lib/libstdc++.so.6  | grep GLIBC

Ubuntu系統anaconda報錯version `GLIBCXX_3.4.30' not found

可以看到系統環境下 /usr/lib/x86_64-linux-gnu/libstdc++.so.6 檔案含有GLIBCXX_3.4.30版本,而anaconda環境下/usr/lib/x86_64-linux-gnu/libstdc++.so.6檔案含有的最高版本為GLIBCXX_3.4.29,是以有了前面的報錯。

檢視anaconda環境下libstdc++.so.6的相關檔案:

Ubuntu系統anaconda報錯version `GLIBCXX_3.4.30' not found
Ubuntu系統anaconda報錯version `GLIBCXX_3.4.30' not found

系統庫路徑下,libstdc++.so.6的相關檔案:

Ubuntu系統anaconda報錯version `GLIBCXX_3.4.30' not found

可以看到我們隻需要将anaconda環境中libstdc++.so和libstdc++.so.6的連結位址指向系統路徑中的位址即可:

Ubuntu系統anaconda報錯version `GLIBCXX_3.4.30' not found

===================================================

再次運作:

Ubuntu系統anaconda報錯version `GLIBCXX_3.4.30' not found

不再報錯,已經修複成功。

繼續閱讀