はじめに
phpbrewでインストールしたphpがdyld: Library not loaded: ...のエラーを出して動かなくなった。phpbrewコマンド自体も中でphp呼ぶ事が多くそれはswitchで選んでいたphpが使われるようでちょっと焦る。なにしろhelpも見られない。
% phpbrew --help
dyld: Library not loaded: /usr/local/opt/readline/lib/libreadline.7.dylib
Referenced from: /Users/matsui/.phpbrew/php/php-7.3.0/bin/php
Reason: image not found
めったにないけどいつかは次もありそうなので対処方法をメモしておく。
原因
homebrewのupdateをした影響で、phpbrew管理下のphpをビルドしたときにリンクしたライブラリがなくなっていた。今回はreadlineが7から8になったので、libreadline.7.dylibがなくなってかわりにlibreadline.8.dylibができていた。
対処
phpbrew switch-off
まずはこれでシステムのphpに切り替える。
(追記) switfh-offがうまくいかない場合
phpbrewの最近のバージョンではこのような場合にphpbrew switch-offもできなくなってしまいました。(switch-offの処理にもphpが必要になったらしい)
代わりにphpbrewが内部で使用するphpを指定できるので、phpbrew system /usr/bin/phpなどとしてやればphpbrewが動作するようになります。
(方法1)再インストール
だいたいインストールしたときのvariantとか忘れてるのでphpbrew list -vで確認する。
% phpbrew list -v
* (system)
php-7.3.1
Variants: +bz2=/usr/local/opt/bzip2 +zlib=/usr/local/opt/zlib +xml +opcache \
+bcmath +calendar +cli +ctype +dom +fileinfo +filter +ipc +json +mbregex \
+mbstring +mhash +mcrypt +pcntl +pcre +pdo +pear +phar +posix +readline \
+sockets +tokenizer +curl +openssl +zip
php-7.3.0
Variants: +bz2=/usr/local/Cellar/bzip2/1.0.6_1 +zlib=/usr/local/Cellar/zlib/1.2.11 \
+xml +opcache +bcmath +calendar +cli +ctype +dom +fileinfo +filter +ipc \
+json +mbregex +mbstring +mhash +mcrypt +pcntl +pcre +pdo +pear +phar \
+posix +readline +sockets +tokenizer +curl +openssl +zip
php-7.2.13
Variants: +bz2=/usr/local/Cellar/bzip2/1.0.6_1 +zlib=/usr/local/Cellar/zlib/1.2.11 \
+xml +opcache +bcmath +calendar +cli +ctype +dom +fileinfo +filter +ipc \
+json +mbregex +mbstring +mhash +mcrypt +pcntl +pcre +pdo +pear +phar \
+posix +readline +sockets +tokenizer +curl +openssl +zip
あとはこれを見ながら再インストール。いい機会なのでもう使いそうにないのは整理するのもいい。
(方法2)なくなったライブラリを戻す
homebrewは古いバージョンも/usr/local/Cellerの下に残っているので、そちらから足りなくなったファイルをみつけてsymbolic linkを張るなどする手もある。
たとえば今回の場合なら
% ln -s /usr/local/Cellar/readline/7.0.5/lib/libreadline.7.dylib /usr/local/opt/readline/lib
ただしこちらの方法を使ったときはうっかりbrew cleanupで古いパッケージをまとめて削除などしないように気をつけること。