php再install時のエラー dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.64.dylib を解消
$ brew reinstall php@7.1
これを実行すると以下のメッセージが表示されました。またphpのバージョン確認(php -v)でも同様のエラーが出ます。
dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.64.dylib
Referenced from: /usr/local/Cellar/php@7.1/7.1.33/bin/php
Reason: image not found
原因は参照しているicu4cのバージョンが違う(ない)ということです。
icu4c/lib/libicui18n.64.dylib
icu4cのver64系を参照しているけど、そんなのないよというエラーです。
icu4cがバージョンアップされたので色々な方が困っていたようです。
なので、icu4cのダウングレードが主な解決方法になります。他にicu4cのバージョンに合わせてphpを入れなおすなどもありますがここでは触れません。
まずは現在のバージョンを確認しましょう。
$ brew info icu4c
私の環境では67.1となっていました。
icu4c: stable 67.1 (bottled) [keg-only]
今回はエラーで「libicui18n.64.dylib」と記載されているので64系に変更したいということです。
「libicui18n.xx.dylib」の「xx」の部分に注目してくださいね。
xxと現在のバージョンが異なる場合はこの記事を読み進めていただけます。
同じ場合はまた別の問題の可能性が高いです。(pathが通っていないとか?)
// まずFormulaディレクトリに移動 cd /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula // icu4cのコミットを確認 $ git log --oneline icu4c.rb e2c833d326 formulae: use new bottle syntax // 省略 e7d9d76421 icu4c 67.1 22fb699a41 icu4c: update 66.1 bottle. c78114de12 icu4c 66.1 a806a621ed icu4c: update homepage and url (#44812) 896d1018c7 icu4c: update 64.2 bottle. c81a048b0e icu4c: update 64.2 bottle. 44895fce11 icu4c 64.2 e7f0f10dc6 icu4c: remove old code. bc0c979524 icu4c: update 63.1 bottle. 8ce87beeae icu4c 63.1 575eb4bbef icu4c: secure/fix/follow url(s) // 省略 9220ee6d43 icu4c: add 10.9 bottle // 今回は「64.2」に戻したいので、「update 64.2 bottle.」の記載のあるバージョンを使います。 // ここでは以下の二つがありますが、新しい方を使います。どっちでもいいと思いますが 896d1018c7 icu4c: update 64.2 bottle. <- こっちを使う c81a048b0e icu4c: update 64.2 bottle. // 使用するバージョン(896d1018c7)をチェックアウト $ git checkout 896d1018c7 icu4c.rb // 再インストール実施 $ brew reinstall icu4c // バージョン確認 $ brew info icu4c
バージョンを確認して自分の求めているバージョンになっていればOKです。
icu4c: stable 64.2 (bottled) [keg-only]
$ php -v PHP 7.1.33 (cli) (built: Dec 19 2019 11:01:14) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies MacBook-Pro-2:Formula tyamauchi$ brew reinstall icu4c
結構ハマりました。