SolarisでMeCab
なんか昔も同じエントリを書いたような覚えがあるんだけど、やるたびに結果が違うのってどういうことなんだろう(笑)。
今回インストールしたのは、mecab-0.80です。
ソースの展開
mecabのソースはここにあります。昔のエントリでは0.83あたりのビルドの挑戦して玉砕していますので、今回は0.80で。
それと辞書のファイルが必要です。今回使ったのはipadic-2.6.1。ここにあります。
まずmecabを展開。
$ /usr/local/bin/tar -zxvf mecab-0.80.tar.gz
次に辞書も展開します。
$ cd mecab-0.80 $ cd dic $ /usr/local/bin/tar -zxvf /hoge/ipadic-2.6.1.tar.gz
textuitlsをインストール
Solaris標準のsortでは辞書を作成するときにコアダンプします。なので、gnuのtextutilをインストールします。GNUの適当なミラーサイトからダウンロードしてください。
ソースを展開して、適当なprefixをつけてconfigure。標準のものをむやみに置換えると痛い目にあう可能性が高いので、別ディレクトリにインストールしたほうがいいでしょう。
$ /usr/local/bin/tar -jxvf textutils-2.1.tar.bz2 $ cd textutils-2.1 $ ./configure --prefix=/opt/gnu $ /usr/local/bin/make # /usr/local/bin/make install
mecabをビルド
さっきソースを展開したディレクトリに移動してconfigure。今回の環境ではUTF8を使うのでそれも一緒に指定してあげます。適当に変更しましょう。それとさっきインストールしたtextutilsが見えるようにパスを変更してあげます。
$ export PATH=/opt/gnu/bin:$PATH $ cd mecab-0.80 $ ./configure --with-charset=utf8 --enable-shared $ /usr/local/bin/make (中略) /usr/ccs/bin/ld -G -z defs -h libmecab.so.0 -o .libs/libmecab.so.0.0.0 nbest_generator.lo writer.lo stringbuffer.lo viterbi.lo param.lo tokenizer.lo japanese_tokenizer.lo csv.lo dictionary_maker.lo tagger.lo libmecab.lo libmecabdic.lo -R/usr/local/lib -R/usr/local/lib -L/usr/local/lib/gcc/sparc-sun-solaris2.9/../.. -L/usr/ccs/lib -L/export/home/hoge/gcc/gcc-4.1.1/objdir/./gcc -L/export/home/hoge/gcc/gcc-4.1.1/objdir/sparc-sun-solaris2.9/libstdc++-v3/src/.libs -L/export/home/hoge/gcc/gcc-4.1.1/objdir/sparc-sun-solaris2.9/libstdc++-v3/src /usr/local/lib/libstdc++.so -lc Undefined first referenced symbol in file _Unwind_Resume nbest_generator.lo (symbol belongs to implicit dependency /usr/local/lib/gcc/sparc-sun-solaris2.9/../../libgcc_s.so.1) ld: fatal: Symbol referencing errors. No output written to .libs/libmecab.so.0.0.0 make[2]: *** [libmecab.la] Error 1 make[2]: Leaving directory `/export/home/hoge/mecab/mecab-0.80/src' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory `/export/home/hoge/mecab/mecab-0.80' make: *** [all] Error 2
おっとエラーですね。_Unwind_Resumeがないって。調べたら、libgcc_s.soだかにあるみたい。そこで環境変数を設定して再度configure。
$ export LDFLAGS=-lgcc_s $ ./configure --with-charset=utf8 --enable-shared $ /usr/local/bin/make (中略) ん〜、ログとるの忘れた。
リンカがエラーを吐いていました。ligcc_s.soが2箇所あって、/usr/local/lib以下のどこかと、ログインしているユーザホームディレクトリのgccの開発環境以下。上記のエラーメッセージにもこんな出力があります。
-L/export/home/hoge/gcc/gcc-4.1.1/objdir/./gcc -L/export/home/hoge/gcc/gcc-4.1.1/objdir/sparc-sun-solaris2.9/libstdc++-v3/src/.libs
なんだかご親切に調べてくれてるみたい。こんなところ見なくて良いよ。ということで、/export/home/hoge/gcc以下を削除。
$ rm -fr /export/home/hoge/gcc $ cd mecab-0.80 $ export LDFLAGS=-lgcc_s $ ./configure --with-charset=utf8 --enable-shared $ /usr/local/bin/make # /usr/local/bin/make install Making install in src make[1]: Entering directory `/export/home/hoge/mecab/mecab-0.80/src' make[2]: Entering directory `/export/home/hoge/mecab/mecab-0.80/src' /bin/bash ../mkinstalldirs /usr/local/lib /bin/bash ../libtool --mode=install .././install-sh -c libmecab.la /usr/local/lib/libmecab.la .././install-sh -c .libs/libmecab.so.0.0.0 /usr/local/lib/libmecab.so.0.0.0 ../libtool: .././install-sh: bad interpreter: アクセス権がありません。 make[2]: *** [install-libLTLIBRARIES] Error 126 make[2]: Leaving directory `/export/home/hoge/mecab/mecab-0.80/src' make[1]: *** [install-am] Error 2 make[1]: Leaving directory `/export/home/hoge/mecab/mecab-0.80/src' make: *** [install-recursive] Error 1
あぁ、このエラーは見覚えがあるな。2006年8月22日のエントリにありますね。実行権をつけて。
# ls -l install-sh -rw-r--r-- 1 hoge staff 5569 7月 4日 2003年 install-sh # chmod 755 ./install-sh # /usr/local/bin/make install
ようやくインストールできました。
試してみる
こないだはcoreダンプして撃沈していましたが、今回はちゃんと動くぞ。
bash-2.05# /usr/local/bin/mecab 今日はいい天気です。 今日 名詞,副詞可能,*,*,*,*,今日,キョウ,キョー は 助詞,係助詞,*,*,*,*,は,ハ,ワ いい 形容詞,自立,*,*,不変化型,基本形,いい,イイ,イイ 天気 名詞,一般,*,*,*,*,天気,テンキ,テンキ です 助動詞,*,*,*,特殊・デス,基本形,です,デス,デス 。 記号,句点,*,*,*,*,。,。,。 EOS