MeCab を Universal Binary でビルドする

なんとか成功したのでメモ。
id:amatubu:20060930 で書いた、Kakasi と同様にいけるかなと思っていたのだけれどなかなかうまくいかなかった。
まず、いっぺんに作る方法は、なぜか configure でエラーが起こってしまってどうにもならなかった。config.log を見ると、コンパイラの動作チェックのところで

gcc: -E, -S, -save-temps and -M options are not allowed with multiple -arch flags

というエラーが起こっていた。テストではコンパイルだけを行うために「-E」オプションが使われているが、それと複数の「-arch」フラグは同時に使えないということらしい。なぜだかわからないが(というか以前はここは通ったような気がするのだが……)、原因が判らないのでとりあえず断念。
ということで、別々に作ってくっつける。mecab と libmecab.a が作れれば ok なのでまあそれでいいかなと。

% mkdir i386
% cd i386
% env CPPFLAGS="-O -g -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch i386" env LDFLAGS="-Wl,-syslibroot,/Developer/SDKs/MacOSX10.4u.sdk -arch i386" ../configure --disable-dependency-tracking --disable-shared --host=none-apple-darwin

で configure までは問題なくいける(host オプションを指定しないと、実行チェックでひっかかってしまった。Intel Mac なら指定しなくても ok かな)。あとは make という流れなのだけど、このままだとリンク時に /usr/lib/libiconv.dylib が ppc アーキテクチャしかないというエラーになってしまう。これではなく、/Developer/SDKs/MacOSX10.4u.sdk/usr/lib/libiconv.dylib を使ってもらわないといけない。
あれこれ検索してみたところ、Apple Mailing List のメッセージを発見。これによると、libtool にバグがあって、-isysroot を見てくれないらしい。ということで、生成された libtool を開き、一部を修正する。修正する箇所は、sys_lib_search_path_spec=... という部分だ(なぜか 2 カ所あるので注意)。

sys_lib_search_path_spec="/Developer/SDKs/MacOSX10.4u.sdk/usr/lib"

こんな感じに修正する。
あとは、

% make
% cd ..

でビルド完了。
次は ppc

% mkdir ppc
% cd ppc
% env CPPFLAGS="-O -g -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch ppc" env LDFLAGS="-Wl,-syslibroot,/Developer/SDKs/MacOSX10.4u.sdk -arch ppc" ../configure --disable-dependency-tracking --disable-shared

libtool は i386 と同様に書き換えておく。

% make
% cd ..

最後に lipo でくっつける。

% mkdir ub
% cd ub
% lipo -create ../i386/src/mecab ../ppc/src/mecab -output mecab
% lipo -create ../i386/src/.libs/libmecab.a ../ppc/src/.libs/libmecab.a -output libmecab.a

できたファイルの確認。

% file mecab
mecab: Mach-O fat file with 2 architectures
mecab (for architecture i386): Mach-O executable i386
mecab (for architecture ppc): Mach-O executable ppc

% file libmecab.a
libmecab.a: Mach-O fat file with 2 architectures
libmecab.a (for architecture i386): current ar archive random library
libmecab.a (for architecture ppc): current ar archive random library

以上。
書くと短く感じるが、なかなかうまくいかなくてかなり時間がかかってしまった。Intel Mac での動作検証はできていないけれど、多分大丈夫だと……。
あとは Perl モジュールのビルドと、辞書。辞書については Kakasi と同様にプラットフォーム依存(エンディアン依存)ということなので、また何か方法を考えなくては。単純にはそれぞれ別の辞書を用意すればよいのだけど、ファイルの大きさを考えるとできればその方法は取りたくないなぁと。

POPFile に投票をお願いします!

POPFileSourceForge.net の Community Choice Award にノミネートされています。(Best Project for Communications カテゴリ)

投票は 7 月 20 日締め切りです。POPFile を使ってくださっているみなさん、ぜひ投票をお願いします!

POPFile に投票するには、SourceForge.net: Community Choce Awards Voting の「Best Project for Communications」カテゴリで「POPFile」を選択してください。(投票には SourceForge.net へのユーザ登録が必要です。これから登録される方は、SourceForge.net: User Account Registration から登録をお願いします)

POPFile が受賞した場合、国境なき医師団への寄付が行われる予定とのことです。

(参考)
https://sourceforge.net/forum/message.php?msg_id=4412585

(2007/08/06 追記:残念ながら POPFile は受賞できませんでした。投票いただいた方、ありがとうございました)

今日のあまつぶむら44

昨晩、オオクワガタ発見。本当に大猟だ。去年このシーズンはさぼってたってことかな? あともう少し。
そういえば、昨日なんか茶色っぽい生き物に襲われた。タランチュラとは違う感じ。長かったし。あれは……サソリ? あれをつかまえるのは骨が折れそうだ。あと 2 種類なんだけどなぁ。