psqlしたらreadlineのエラーが出るようになって
rbenvとphpenvの共存で色々やってたら、突然psql(9.3.4)がエラーを吐くようになった。
% psql -V
dyld: Library not loaded: /usr/local/opt/readline/lib/libreadline.6.dylib
Referenced from: /usr/local/bin/psql
Reason: image not found
readlineとは?
readlineはpsqlでデフォルト使用になっている「行入力支援ライブラリ」との事。
postgresqlのドキュメント( https://www.postgresql.jp/document/9.3/html/install-requirements.html )を見たら
コマンドの記憶などに使っているらしい。
なのでpsqlではエラーが出るけど、postgresql自体に問題はなく、GUIではちゃんと動いている。
Cellerにreadline 6.3のインストール
libreadline.6.dylibがない!との事ですが、brew info readlineしたらreadlineは7しかないので6をインストールする。
homebrewのcellerにインストールすればhomebrewが認識してくれるはずなので
/usr/local/Celler以下にインストールしてみよう
ここ( http://core.ring.gr.jp/pub/GNU/readline/ )から6.3のソースをDL。
以下のオプションをつけてconfigureしたらmake&make install(testはない)
% ./configure --prefix=/usr/local/Cellar/readline/6.3 --mandir=/usr/local/Cellar/readline/6.3/share/man --infodir=/usr/local/Cellar/readline/6.3/share/info --enable-multibyte
homebrewでreadlineを7から6に切り替え
再度brew info
% brew info readline
readline: stable 7.0 [keg-only]
Library for command-line editing
https://tiswww.case.edu/php/chet/readline/rltop.html
/usr/local/Cellar/readline/6.3 (39 files, 2M)
Built from source
/usr/local/Cellar/readline/7.0 (46 files, 2.1M) *
Built from source on 2016-10-06 at 17:03:00
6が認識されたので、switch
% brew switch readline 6.3
Cleaning /usr/local/Cellar/readline/6.3
Cleaning /usr/local/Cellar/readline/7.0
Opt link created for /usr/local/Cellar/readline/6.3
コマンドのエイリアスを確認
% ls -la /usr/local/opt/readline/lib
total 2984
(略)
-r-xr-xr-x 1 hoge admin 303128 10 6 17:35 libreadline.6.3.dylib
lrwxr-xr-x 1 hoge admin 21 10 6 17:35 libreadline.6.dylib -> libreadline.6.3.dylib
(略)
無事libreadline.6.dylibのエイリアスが作成されていますね。
% psql -V
psql (PostgreSQL) 9.3.4
無事に動きました。
追記:この後rails cしたらreadline7じゃないとダメってエラー出て、場合によってswitchするという謎の状況に陥っているので早くなんとかしたい。
/usr/local/opt/readline/lib/に6と7両方のリンク貼ったらだめかなぁ〜。