Homebrew でいれた 古いバージョンの mecab が mecab-ruby といい感じにならない
以前書いた記事 古いバージョンの mecab を homebrew でいれたのでメモ とちょっとしたエラー対処 - gotagota日記 にある通り、 Homebrew で少し古めの mecab をいれたのですが、どうも mecab-ruby とうまいこといってない。
こんな感じのエラーが出ました。( PATH/TO/
の部分は各自の環境によって様々です)
dyld: lazy symbol binding failed: Symbol not found: __ZN5MeCab12getLastErrorEv Referenced from: /PATH/TO/MeCab.bundle Expected in: flat namespace
いろいろ調べました結果、これはライブラリの参照先が間違ってる場合におこるようです。
そこで、上のエラーメッセージにあります、 Referenced from:
のうしろにあるパスをまるっとコピーして以下のコマンドに渡します。
$ otool -L /PATH/TO/MeCab.bundle
自分の場合は以下のように出ました。
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 120.0.0) /usr/lib/libmecab.1.0.0.dylib (compatibility version 1.0.0, current version 1.0.0) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1) /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)
このうち、 mecab とはいっている /usr/lib/libmecab.1.0.0.dylib
は次で使うのでメモっておいてください。
次に
$ sudo install_name_tool -change "/usr/lib/libmecab.1.0.0.dylib" /usr/local/lib/libmecab.2.dylib /PATH/TO/MeCab.bundle
として、本来使いたいパスを通します。
ここで、初めて出てきた /usr/local/lib/libmecab.2.dylib
ですが、これが本来使いたいパスです。
つまりこのコマンドの構文は
sudo install_name_tool -change "古いパス" 新しいパス 適用したいファイル
といった感じです。