Hatena::ブログ(Diary)

kento日記 このページをアンテナに追加 RSSフィード

2010-12-24

[][]Macに入っているlibmecab.dylibは安易にいじっちゃダメ! 20:19 Macに入っているlibmecab.dylibは安易にいじっちゃダメ!を含むブックマーク

ヒドイ目にあいました。

日本語のテキストをいじる人なら、出所不明なMeCabバイナリなんて使えないですよね。やっぱり自前でビルドして、configureのオプションとかmecabrcとか自分で管理したいですよね。そこで、MacOS上で一からビルドしました。デフォルト通り、/usr/local/ほげほげにインストールして使っていました。が、Mecab_Rubyなどのバインディングビルドがこけることに気づき…

原因は、バインディングビルド時に/usr/lib/libmecab.dylibが優先されてリンクされているからでした。そんなところにインストールした覚えないぞ!と思ったら、Macに最初から入っているものらしく、/usr/local/libにあるから要らないよねーと削除*1したんです。結果、とりあえずバインディングビルドはOKで、とりあえず問題はなかったのですが…

最近、夜フクロウ*2アップデートされました。すると、日本語を打った直後に必ずクラッシュするという不可解な現象が起きはじめました。はじめは夜フクロウバグだろうと思い静観していたのですが、他のユーザが騒ぐ様子もないので本格的に調べ始めました。

同時期に、システム環境設定が開かない(起動直後にクラッシュする)問題が発生しました。もうなんかいろいろ末期な感じです。とりあえず再起動だろ、と再起動すると、今度はSpotlightインデックス生成が終わらないという問題も発生し、もう顔面蒼白です。

クラッシュレポートを見ると、夜フクロウはSpellCheckerの内部で、システム環境設定とSpotlightのインデクサはTokenizerの内部で、どちらもNullPointerにアクセスしてクラッシュしていました。最初は全く関連がわからなかったのですが、ふとSpotlightのtokenizeはMeCabを使ってると聞いた覚えがあったことを思い出し、/usr/lib/libmecab.dylibを復活させてみました。

結果、無事全ての問題を解決できました…。うかつにシステムのライブラリをいじるものではないということがわかりました…。問題はAppleビルドしたMeCabと自分でビルドしたMeCabをどう共存させるかなんですが…

*1:正確にはリネームして置いときました

*2MacTwitterクライアントYoruFukurou