Text::MeCabのインストールでCan't build and link to 'mecab', 'mecab'

たまにレンタルサーバーで作業すると、いつも問題なかったところでつまずいていらつく。

さくらインターネットmecabをユーザー領域にインストールする方法〜みたいのは時々あるけど、さくらインターネットmecabは最初から入ってた。いつからかは知らない。辞書はipadicで、文字コードeuc-jp。

なんだけど、Text::MeCab(0.20007)のインストール時に

Detected the following mecab information:
   version: 0.97
   cflags: -I/usr/local/include -DMECAB_MAJOR_VERSION=0 -DMECAB_MINOR_VERSION=97 -I src
   libs: -L/usr/local/lib -lmecab -lstdc++
   include: /usr/local/include
Can't build and link to 'mecab', 'mecab'

みたいな感じでうまくいかない。

これはMakefile.PLから呼ばれてるDevel::CheckLib::check_lib_or_exitがlibmecabがうまく呼べないって言ってるらしい。で、check_lib_or_exitに`debug => 1`を追加してみると、

# /usr/bin/cc assertlibhHu2hB0O.c -o assertlibZiEPPX3y -lmecab -L/usr/local/lib
/usr/local/lib/libmecab.so: undefined reference to `pthread_create'
# /usr/bin/cc assertlibhHu2hB0O.c -o assertlib1eVcxKXD -lmecab -L/usr/local/lib
/usr/local/lib/libmecab.so: undefined reference to `pthread_create'
# /usr/bin/cc assertlibhHu2hB0O.c -o assertlibXD7sVG2y -lstdc++ -L/usr/local/lib
Can't build and link to 'mecab', 'mecab'

という感じで、pthread_createがどうたらって出てくる。
よくわからんのだけど、これは cc に -lpthread オプションを付け忘れると出るものらしく、Devel::CheckLibのcheck_lib_or_exitサブルーチンの @sys_cmd 作ってるあたりに "-lpthread" を追加してやるとperl Makefile.PLもうまくいく。

なので気にならない人は cpan で look Text::MeCabとかした後そのへんをいじるか、Makefile.PLのcheck_lib()をコメントアウトしちゃうとかすれば後は make && make installすればいいかも

さくらインターネットでも自分でmecabコンパイルして入れたときは出ないので、Text::MeCabやDevel::CheckLibの問題じゃなくさくらインターネットの環境の問題じゃないかな

    • -

追記:
ユーザー領域に自分でmecabをインストールしたときと比べて、mecab-config --cxxが、さくらインターネットのはc++、自分だとg++になるのが違う点だった。なんかインストール時に失敗してるんじゃないか?とも思うのでサポートに報告メールを出しておいた。