brew upgradeの後、phpenvがicu4cでエラーになる際の対処法
.8時間費やした。。。。。他の人がはまらないように、記載しておきます。
もともとYarnを使っていて、「brew upgrade」してください。的なメッセージが出てきたので、何気なく、それに従っただけ。
長い間「brew upgrade」していなかったからかよくわからないけど、まさかのPHPが動かなくなった。
エラー内容と原因
このようなメッセージ。
$ php -v dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.61.dylib Referenced from: /Users/<USER_NAME>/.anyenv/envs/phpenv/versions/7.2.5/bin/php Reason: image not found Abort trap: 6
普段使っているPHPは、brewで入れたものではなくて、「phpenv global」を指定していたやつだし、もともとYarnのアップデートのためにやったものだから、PHPに影響が行くとは全く思っていなかった。。。
いろいろ調べていくと、phpenvとnodeで依存しているicu4cのバージョンがずれているためのよう。
#phpenv でインストール済みのPHP。"brew upgrade"したせいで、使えなくなってしまっていた。
どうもicu4cというのが59になったことが原因らしく、"brew switch icu4c 58.2"を実行することで無事元に戻った。
なるほど。勉強になった。— tomomo (@eclairtom) August 14, 2017
dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.61.dylib
自分のケースでは、brew upgradeすることで、icu4cが62.1にアップグレードされてしまったんだけど、
php実行時のエラーでは、icu4cのバージョン「61(「…..icu4c/lib/libicui18n.61.dylib」)」をロードしようとされている。
brewのicu4cをダウングレード
というわけで、こちらのQiita記事の手順に沿って勧めたところ、
icu4cの「61」は「61.1」というマイナーバージョンのgit commitがあったので、それをつかった。
というわけで、icu4cをダウングレードして、switchする。
$ cd /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/ $ git fetch --unshallow $ brew log icu4c $ git checkout XXXXXXXXX icu4c.rb $ brew uninstall icu4c $ HOMEBREW_NO_AUTO_UPDATE=1 brew install icu4c $ git reset --hard $ brew switch icu4c 61.1
そしたら、phpがつかえるようになった。
補足
解決の糸口は、StackOverFlowでもなくて、Githubでもなくて、Qiitaでもなくて、Twitterだった。
Twitterで検索するというのも一つ。
ちなみに、かなり長い時間ハマってしまって、新しいバージョンを入れて環境を切り替えたほうが早いのではとやってみるも、今度は、php-build側で全く別のエラーで、PHPのエラーがでて、一向にインストールできなかった。
ログをみて、解決できそうなエラーは解決してみたが、どうも次のエラーだけが解消できずに、別バージョンのPHPをインストールできずにいます。。。
_Nullable /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/usr/include/signal.h:106:48: note: insert '_Nonnull' if the pointer should never be null int sigvec(int, struct sigvec *, struct sigvec *); ^ _Nonnull