なんだこれは

はてなダイアリーから移転しました。

darkmatter on macOS で libev がみつからないとき

TL;DR

darkmatter といえば、Common Lisp のノートブック形式の環境。macOSで darkm を実行するとlibevがみつからないときがある。

LD_LIBRARY_PATH=/opt/local/lib darkm 

としてやるとうまくいく。 ここで /opt/local/lib は libevのあるパス

CFFIがlibevを見付けられない場合のメッセージ例

Unhandled CFFI:LOAD-FOREIGN-LIBRARY-ERROR:
Unable to load any of the alternatives:
("libev.4.dylib" "libev.4.so" "libev.so.4" "libev.dylib" "libev.so")

libev のパス


この libev は homebrewでインストールしていれば、/usr/local/lib に macportであれば、/usr/local/lib にあるはずである。

ライブラリのパスの設定

CFFI:LOAD-FOREIGN-LIBRARY-ERROR で検索すると、~/.sbclrc (処理系がClozure CLなら ~/.ccl-init.lisp) に

(pushnew "/opt/local/lib/"
         cffi:*foreign-library-directories*
         :test #'equal)

と書いて、パスを追加すればいい旨が記載されているんだが、~/.sbclrc の時点で cffiパッケージを読み込んでいるようにしなければ、cffi:*foreign-library-directories* が undefined となってしまう。それってどうなの?

そこで ql:quickload :cffi して、cffi:*foreign-library-directories* の値をみたところ、 cffi:*foreign-library-directories* の初期値は環境変数の LD_LIBRARY_PATH からひっぱってくるもよう。

じゃあ、bashrcで設定して、 export すればいいのかと思うのだがそうではない。

macOSEl Capitan では LD_LIBRARY_PATH, DYLD_LIBRARY_PATH が環境変数にならない のです。

しかたがないので、 LD_LIBRARY_PATH=/opt/local/lib darkm として実行するとうまくいった。