事象
homebrewでなにかしらのアップデートを行った後に、ふとphpを実行すると以下のエラーとなった。
> php -v
dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicuio.67.dylib
Referenced from: /Users/yamauchiryouji/.phpenv/versions/7.4.7/bin/php
Reason: image not found
zsh: abort php -v
/usr/local/opt/icu4c/libを確認すると、たしかに依存してるライブラリlibicuio.67.dylibが消えており、libicuio.69.dylibになってしまっていた。
> ls /usr/local/opt/icu4c/lib/
icu libicuio.69.1.dylib libicutu.69.dylib
libicudata.69.1.dylib libicuio.69.dylib libicutu.a
libicudata.69.dylib libicuio.a libicutu.dylib
libicudata.a libicuio.dylib libicuuc.69.1.dylib
libicudata.dylib libicutest.69.1.dylib libicuuc.69.dylib
libicui18n.69.1.dylib libicutest.69.dylib libicuuc.a
libicui18n.69.dylib libicutest.a libicuuc.dylib
libicui18n.a libicutest.dylib pkgconfig
libicui18n.dylib libicutu.69.1.dylib
対応
homebrewで過去のパッケージをインストールする。
お手軽そうなbrew swtichや、homebrewのリポジトリのcommitidを指定たURLからのインストールはできなくなったとのことなので、tapという機能を使う。
こちらを参考にさせていただいた。
christina04.hatenablog.com
ローカルにhomebrewから参照できるリポジトリを作成する。
> brew tap-new ryomasao/taps
Initialized empty Git repository in /usr/local/Homebrew/Library/Taps/ryomasao/homebrew-taps/.git/
[master (root-commit) 77a0f36] Create ryomasao/taps tap
3 files changed, 88 insertions(+)
create mode 100644 .github/workflows/publish.yml
create mode 100644 .github/workflows/tests.yml
create mode 100644 README.md
==> Created ryomasao/taps
/usr/local/Homebrew/Library/Taps/ryomasao/homebrew-taps
インストールしたいパッケージをhomebrewのリポジトリから抽出して、自分のリポジトリに登録する。
今回利用したいicu4cのversionも指定する。
> brew extract icu4c ryomasao/taps --version 67
インストール。
> brew install ryomasao/taps/icu4c@61
これでいける!と思ったら、別バージョンのicu4cが別のディレクトリに配置されていた。
lrwxr-xr-x 1 yamauchiryouji admin 20 5 21 15:22 icu4c -> ../Cellar/icu4c/69.1
lrwxr-xr-x 1 yamauchiryouji admin 23 5 21 15:55 icu4c@67 -> ../Cellar/icu4c@67/67.1
既存の69.1を置き換えた場合、そっちに依存してる何かが起動しなくなるの恐れがあったので、/usr/local/opt/icu4c/lib配下に別バージョンへのシンボリックリンクを貼ることで解決できた。
libicuio.67.dylib -> ../../../icu4c@67/67.1/lib/libicuio.67.1.dylib
libicui18n.67.dylib -> ../../../icu4c@67/67.1/lib/libicui18n.67.1.dylib
libicuuc.67.dylib -> ../../../icu4c@67/67.1/lib/libicuuc.67.1.dylib
libicudata.67.dylib -> ../../../icu4c@67/67.1/lib/libicudata.67.1.dylib