WSL環境で動かしてるVSCodeでTensorboardを起動できるようにしようとすると、VSCodeが自動で出してくるインストールの指定
$ conda install -c conda-forge tensorboard
を実行したせいだと思うのだが、sklearn関係のところで「GLIBCXX_3.4.29」が入ってないというエラーがでて動かなくなるという問題が起きた。
ImportError: /lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /home/stealth/anaconda3/envs/mmvcwsl/lib/python3.8/site-packages/sklearn/metrics/_pairwise_distances_reduction.cpython-38-x86_64-linux-gnu.so)
そこでまず該当の「libstdc++.so.6」がどのバージョンまでの GLIBCXX に対応しているかを確認してみた。
$ strings /lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX GLIBCXX_3.4 GLIBCXX_3.4.1 …略 GLIBCXX_3.4.27 GLIBCXX_3.4.28
ということで「3.4.29」は対応していないからエラーになっていることがわかった。
ここ見るとこういう場合、conda-forgeから新しいめの「gxx_linux-64」をインストールすると良い模様。
python - Install GLIBCXX_3.4.29 in anaconda - Stack Overflow https://stackoverflow.com/questions/68205760/install-glibcxx-3-4-29-in-anaconda
$ conda install -c conda-forge gxx_linux-64==11.1.0
しかしこれでもダメ。
最新のが必要なのかと思い探してみると 11.2.0 があったのでこれを入れてみる。
https://anaconda.org/anaconda/gxx_linux-64
$ conda install -c conda-forge gxx_linux-64==11.2.0
がやっぱダメ。
というか strings 見ると変わってないから、そもそも conda で入る場所が /lib/... 以下じゃないので、見るところが間違ってるというのが根本的問題に見える。
ちなみに下記ページでは自分で手で /usr/lib64/ 以下にファイルをコピーしていた。
解决类似 /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found 的问题 - IT笔录 https://itbilu.com/linux/management/NymXRUieg.html
そこでanacondaの環境が保存されてるディレクトリ以下の ~/anaconda3/envs/mmvcwsl/lib/libstdc++.so.6 を確認してみたところ、
$ strings lib/libstdc++.so.6 | grep GLIBCXX GLIBCXX_3.4 GLIBCXX_3.4.1 …略 GLIBCXX_3.4.28 GLIBCXX_3.4.29
と、ちゃんと3.4.29 が入っていることが確認できた。
なのでやはり、conda環境で参照してるライブラリのパスが合ってないのが問題な気がした。
そこでLD_LIBRARY_PATHも含めてググってみると、下記の内容が見つかった。
やはりLD_LIBRARY_PATHに anacondaのlibディレクトリを指定して解決していた。
python - ImportError: /lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found - Stack Overflow https://stackoverflow.com/questions/49875588/importerror-lib64-libstdc-so-6-version-cxxabi-1-3-9-not-found
python - Anaconda ImportError: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found - Stack Overflow https://stackoverflow.com/questions/58424974/anaconda-importerror-usr-lib64-libstdc-so-6-version-glibcxx-3-4-21-not-fo
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/your/path/to/conda/env/lib
ということで自分の場合は
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/anaconda3/envs/mmvcwsl/lib
とすることで解決した。
でもこれだとcondaで環境切り替えたとき、一緒に LD_LIBRARY_PATH も切り替えないといけないはずで、それが一発でできなくなるのはなんかおかしいように思う。
思うが、これ以上追及するのはさすがにヤックシェービングすぎるので、環境切り替えたりなんだりするシェルスクリプトにLD_LIBRARY_PATHの指定も入れて解決したことにした。
なにかもっと根本的な解決法があれば教えてください。