phpがdyld: Library not loaded: /usr/local/opt/icu4c/lib/libicuio.68.dylibエラーで動かなくなった
こんにちは。Gaji-Labo 横田です。ある日突然、anyenv でいれている php が icu4c でエラーで動かなくなって困りました。その時の解決方法です。
エラー
php のバージョンは 8.0.11。
% anyenv versions
phpenv:
system
* 8.0.11 (set by /Users/[*]/.php-version)
composer install
をたたくとエラーに。
% composer install
dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicuio.68.dylib
Referenced from: /Users/[USER NAME]/.anyenv/envs/phpenv/versions/8.0.11/bin/php
Reason: image not found
dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicuio.68.dylib
Referenced from: /Users/[USER NAME]/.anyenv/envs/phpenv/versions/8.0.11/bin/php
Reason: image not found
/Users/[USER NAME]/.anyenv/envs/phpenv/plugins/phpenv-composer/libexec/composer: line 43: 87773 Abort trap: 6 "$php_bin" "$composer_phar" "$@"
そもそも php -v
が通らなくなってる。
% php -v
dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicuio.68.dylib
Referenced from: /Users/[USER NAME]/.anyenv/envs/phpenv/versions/8.0.11/bin/php
Reason: image not found
zsh: abort php -v
何が起きてるのか
エラーとなっている icu4c をHomebrew で見てみると
% brew info icu4c [master]
icu4c: stable 70.1 (bottled) [keg-only]
C/C++ and Java libraries for Unicode and globalization
https://icu.unicode.org/home
/usr/local/Cellar/icu4c/67.1 (258 files, 71.2MB)
Poured from bottle on 2020-08-28 at 14:08:31
/usr/local/Cellar/icu4c/68.2 (259 files, 72.5MB)
Poured from bottle on 2022-01-14 at 15:44:39
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/icu4c.rb
License: ICU
どうやら、依存しているパッケージ icu4c のバージョンが 70.1 と新しくなってしまっているのが原因のようです。brew update
などが原因となることが多いようです。
エラーを見直してみると
dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicuio.68.dylib
とあるので、バージョン68系に戻すとよさそうです。
icu4c をインストールし直す
まずは brew update
し、 icu4c をインストールし直します。
% brew update && brew reinstall icu4c
.
.
.
==> icu4c
icu4c is keg-only, which means it was not symlinked into /usr/local,
because macOS provides libicucore.dylib (but nothing else).
If you need to have icu4c first in your PATH, run:
echo 'export PATH="/usr/local/opt/icu4c/bin:$PATH"' >> ~/.zshrc
echo 'export PATH="/usr/local/opt/icu4c/sbin:$PATH"' >> ~/.zshrc
For compilers to find icu4c you may need to set:
export LDFLAGS="-L/usr/local/opt/icu4c/lib"
export CPPFLAGS="-I/usr/local/opt/icu4c/include"
For pkg-config to find icu4c you may need to set:
export PKG_CONFIG_PATH="/usr/local/opt/icu4c/lib/pkgconfig"
Homebrew の Formulaディレクトリに移動する
% cd $(brew --prefix)/Homebrew/Library/Taps/homebrew/homebrew-core/Formula
icu4c のコミットログを確認する
% git log --follow icu4c.rb
commit fdba13da61f815f5ab0789f4af72b8f9d05543a6
Author: Carlo Cabrera <30379873+carlocab@users.noreply.github.com>
Date: Sat Feb 27 23:48:29 2021 +0000
icu4c: update 68.2 bottle.
commit 45dd7258f9aecaf2606a47f3d5518b452889533a
Author: Carlo Cabrera <30379873+carlocab@users.noreply.github.com>
Date: Tue Feb 16 13:32:01 2021 +0000
icu4c 68.2
Removed patch.
目的のバージョン 68 系がありました。
目的のバージョンをインストール
ダウングレードしたいバージョン 68 系にチェックアウトし、パッケージをインストールします。インストール後は目的のバージョンにスイッチ。
% git checkout fdba13da61f815f5ab0789f4af72b8f9d05543a6
% brew reinstall ./icu4c.rb
% brew switch icu4c 68.2
ダウングレードを確認
% brew info icu4c
icu4c: stable 68.2 (bottled) [keg-only]
C/C++ and Java libraries for Unicode and globalization
http://site.icu-project.org/home
/usr/local/Cellar/icu4c/68.2 (259 files, 72.5MB)
Poured from bottle on 2022-06-24 at 12:11:05
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/icu4c.rb
License: ICU
68 系にダウングレード出来てるのが確認できました!
Formula で master へ checkout する
Formula % git checkout master
Updating files: 100% (6390/6390), done.
Previous HEAD position was fdba13da61f icu4c: update 68.2 bottle.
Switched to branch 'master'
Your branch is up to date with 'origin/master'.
これで無事に php が動くようになりました!
% php -v
PHP 8.0.11 (cli) (built: Jan 17 2022 16:01:29) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.11, Copyright (c) Zend Technologies
with Zend OPcache v8.0.11, Copyright (c), by Zend Technologies
with Xdebug v3.1.2, Copyright (c) 2002-2021, by Derick Rethans
終わりに
突然動かなくなった時でもエラーメッセージをよく読み解けば解決へのヒントがありますね。
動かなくなった時にいつも一緒に調べてくれたりヒントをくれるメンバーに感謝を持って、今日はこの辺で。
今すぐの転職でなくてもOKです!まずはお話しませんか?
現在弊社では一緒にお仕事をしてくださるエンジニアさんやデザイナーさんを積極募集しています。まずはカジュアルな面談で、お互いに大事にしていることをお話できたらうれしいです。詳しい応募要項は以下からチェックしてください。
- React, Next.js を得意とするフロントエンドエンジニア募集要項
- シニアクラスのフロントエンドエンジニア募集要項
- 抽象的な物事を具体的な機能にビジュアライズできるUIデザイナー募集要項
- UIデザイナーとして手ざわりのいいUIを作りたい業務委託パートナーさん募集(Wantedly)
パートナー契約へのお問い合わせもお仕事へのお問い合わせも、どちらもいつでも大歓迎です。まずはオンラインでの面談でお話しましょう。ぜひお気軽にお問い合わせください!
話をしてみたい!