brew upgradeの後、phpenvがicu4cでエラーになる際の対処法

by codechord. 0 Comments

  • このエントリーをはてなブックマークに追加
  • このエントリーをはてなブックマークに追加

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のバージョンがずれているためのよう。

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

 

関連リンク


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA