PHPの実行時に「dyld[21331]: Library not loaded: /usr/local/opt/icu4c/lib/libicuio.72.dylib」のエラーが発生した時の対処法

MacでPHPの開発をしている時に、以下のエラーが発生した。

dyld[21331]: Library not loaded: /usr/local/opt/icu4c/lib/libicuio.72.dylib

上記のエラーが発生したタイミングは、Homebrewのupdateをした時で、PHPが使っているicu4cというライブラリのバージョンを上げた時だ。

この記事では、上記エラーの解決策を紹介していく。

開発環境について

  • Mac 13.4.1(22F82)
  • PHP 8.1.19
  • Homebrew 4.0.26-29-g9a482de

解決策

解決策としては、icu4cライブラリのver 72.1をインストールして/usr/local/opt/icu4c/lib/のディレクトリにシンボリックリンクを通せば良い。

まずは以下の手順でicu4cのver72をインストールする。codebug/tapsの部分は任意のリポジトリ名で良い。

brew tap-new codebug/taps
brew extract icu4c codebug/taps --version 72
brew install codebug/taps/icu4c@72

icu4cのver72が/usr/local/opt/icu4c@72/libのディレクトリにインストールされる。 次に以下のシェルスクリプトを実行してシンボリックリンクを貼る。

for file in "libicudata" "libicui18n" "libicuio" "libicutest" "libicutu" "libicuuc"; do
    ln -s "/usr/local/opt/icu4c@72/lib/$file.72.dylib" "/usr/local/opt/icu4c/lib/$file.72.dylib"
done

試しにphp -vを実行してバージョン表示が正常にされていればOK。

試したけどダメだった方法

PHPが突然Library not loaded: /path/to/libicui18n.64.dylibとか言い出したときの対処法」の記事を参考にして解決しようとしたが、 上手くいかず。

上記記事ではgit checkoutでicu4cのバージョンを変更してインストールし直す事で解決しようとしているが、 そもそも僕のHomebrewのバージョンではbrew switchコマンドが使えないため、解決に至らなかった。

参考文献