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++になるのが違う点だった。なんかインストール時に失敗してるんじゃないか?とも思うのでサポートに報告メールを出しておいた。