GLIBCXX_3.4.30 エラー解決方法 (librosa, conda環境)
問題の概要
Debian GNU/Linux 11 (bullseye) で conda 仮想環境内で import librosa
を実行した際に、以下のエラーが発生します:
/home/lakshya/anaconda3/envs/tff_env/lib/python3.9/site-packages/zmq/backend/cython/../../../../.././libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /home/lakshya/anaconda3/envs/tff_env/lib/python3.9/site-packages/scipy/fft/_pocketfft/pypocketfft.cpython-39-x86_64-linux-gnu.so)
このエラーは、システムの標準C++ライブラリ(libstdc++.so.6)に必要なバージョン GLIBCXX_3.4.30
が存在しないことを示しています。
原因分析
この問題は、以下の状況で発生します:
- システムのlibstdc++バージョンが古い:Debian 11のデフォルトlibstdc++はGLIBCXX_3.4.28までしかサポートしていない
- condaパッケージの互換性問題:新しいバージョンのSciPyなどのパッケージは、新しいGLIBCXXバージョンを必要とする
- ライブラリパスの競合:conda環境とシステムのライブラリパス間で競合が発生している
解決方法
以下に、効果的な解決策を優先順位順に紹介します。
方法1: gccのアップデート(推奨)
conda-forgeから最新のgccをインストールします:
conda install -c conda-forge gcc=12.1.0
この方法は、多くの場合で問題を解決し、環境の一貫性を保ちます。
方法2: libstdcxx-ngのインストール
gccのインストールがうまくいかない場合、直接libstdcxx-ngをインストールします:
conda install -c conda-forge libstdcxx-ng=12
TIP
libstdcxx-ng
はC++標準ライブラリのcondaパッケージ版で、新しいGLIBCXXバージョンを含んでいます。
方法3: SciPyのアップグレード
バージョン不一致が原因の場合、SciPyを最新版にアップグレードします:
pip install scipy --upgrade
現在のバージョンを確認:
conda list | grep scipy
pip list | grep scipy
方法4: SciPyのダウングレード
アップグレードで解決しない場合、互換性のあるバージョンにダウングレードします:
conda install -c anaconda scipy==1.9.1
WARNING
ダウングレードは一時的な解決策であり、長期的には最新バージョンへの移行を検討してください。
方法5: LD_LIBRARY_PATHの設定
conda環境のライブラリパスを優先させます:
export LD_LIBRARY_PATH=/path-to-your-conda/envs/your-env-name/lib:$LD_LIBRARY_PATH
現在の環境のパスを確認:
echo $CONDA_PREFIX
方法6: シンボリックリンクの作成(最終手段)
システムのlibstdc++をconda環境にリンクします:
cd /home/ubuntu/anaconda3/envs/your_env/lib
mv libstdc++.so.6 libstdc++.so.6.old
ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6 libstdc++.so.6
DANGER
この方法はシステムの安定性に影響する可能性があるため、最終手段としてのみ使用してください。
トラブルシューティング
GLIBCXXバージョンの確認
現在利用可能なGLIBCXXバージョンを確認:
strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX
strings $CONDA_PREFIX/lib/libstdc++.so.6 | grep GLIBCXX
インポート順序の調整
Pythonスクリプトの先頭でlibrosaをインポート:
import librosa # 最初にインポート
import torch
import other_modules
予防策
conda-forgeの優先使用:
bashconda config --add channels conda-forge conda config --set channel_priority strict
環境の一貫性維持:
bashconda env export > environment.yml
定期的なアップデート:
bashconda update --all
まとめ
GLIBCXX_3.4.30エラーは、conda環境とシステムライブラリ間のバージョン不一致によって発生します。最も安全で効果的な解決策は、conda-forgeから適切なバージョンのgccまたはlibstdcxx-ngをインストールすることです。状況に応じて、SciPyのバージョン調整やライブラリパスの設定も有効な選択肢となります。
INFO
Debian 12以降ではシステムのlibstdc++バージョンが更新されているため、この問題は発生しにくくなっています。