Skip to content

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 が存在しないことを示しています。

原因分析

この問題は、以下の状況で発生します:

  1. システムのlibstdc++バージョンが古い:Debian 11のデフォルトlibstdc++はGLIBCXX_3.4.28までしかサポートしていない
  2. condaパッケージの互換性問題:新しいバージョンのSciPyなどのパッケージは、新しいGLIBCXXバージョンを必要とする
  3. ライブラリパスの競合:conda環境とシステムのライブラリパス間で競合が発生している

解決方法

以下に、効果的な解決策を優先順位順に紹介します。

方法1: gccのアップデート(推奨)

conda-forgeから最新のgccをインストールします:

bash
conda install -c conda-forge gcc=12.1.0

この方法は、多くの場合で問題を解決し、環境の一貫性を保ちます。

方法2: libstdcxx-ngのインストール

gccのインストールがうまくいかない場合、直接libstdcxx-ngをインストールします:

bash
conda install -c conda-forge libstdcxx-ng=12

TIP

libstdcxx-ng はC++標準ライブラリのcondaパッケージ版で、新しいGLIBCXXバージョンを含んでいます。

方法3: SciPyのアップグレード

バージョン不一致が原因の場合、SciPyを最新版にアップグレードします:

bash
pip install scipy --upgrade

現在のバージョンを確認:

bash
conda list | grep scipy
bash
pip list | grep scipy

方法4: SciPyのダウングレード

アップグレードで解決しない場合、互換性のあるバージョンにダウングレードします:

bash
conda install -c anaconda scipy==1.9.1

WARNING

ダウングレードは一時的な解決策であり、長期的には最新バージョンへの移行を検討してください。

方法5: LD_LIBRARY_PATHの設定

conda環境のライブラリパスを優先させます:

bash
export LD_LIBRARY_PATH=/path-to-your-conda/envs/your-env-name/lib:$LD_LIBRARY_PATH

現在の環境のパスを確認:

bash
echo $CONDA_PREFIX

方法6: シンボリックリンクの作成(最終手段)

システムのlibstdc++をconda環境にリンクします:

bash
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バージョンを確認:

bash
strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX
bash
strings $CONDA_PREFIX/lib/libstdc++.so.6 | grep GLIBCXX

インポート順序の調整

Pythonスクリプトの先頭でlibrosaをインポート:

python
import librosa  # 最初にインポート
import torch
import other_modules

予防策

  1. conda-forgeの優先使用

    bash
    conda config --add channels conda-forge
    conda config --set channel_priority strict
  2. 環境の一貫性維持

    bash
    conda env export > environment.yml
  3. 定期的なアップデート

    bash
    conda update --all

まとめ

GLIBCXX_3.4.30エラーは、conda環境とシステムライブラリ間のバージョン不一致によって発生します。最も安全で効果的な解決策は、conda-forgeから適切なバージョンのgccまたはlibstdcxx-ngをインストールすることです。状況に応じて、SciPyのバージョン調整やライブラリパスの設定も有効な選択肢となります。

INFO

Debian 12以降ではシステムのlibstdc++バージョンが更新されているため、この問題は発生しにくくなっています。