雑誌のファイルから機械学習に投げるための素性作成C++のプログラムを書いているが、時間がかかりまくるのでマルチスレッドにしている。が、ローカル環境ではうまくいくのに、リモートではうまくいかないという困った事態に遭遇。
gdb使って死んだところでwhereとかしてみるとMeCab::Viterbi::connectNormalというところで死んでいた。なんでかな思いながら調べていると、リモートでは
$ mecab -v mecab of 0.96 $ which mecab /opt/local/bin/mecab
で、ローカルでは
$ mecab -v mecab of 0.98pre2 $ which mecab /usr/local/bin/mecab
となっていた。そういえばリモートはportで入れたMeCabで、ローカルはソースから入れたものだった。
マルチスレッド環境で辞書を開くときの排他制御がうまくいっていなかったバグの修正
http://mecab.sourceforge.jp
ということなので、この付近かな。思ったより早く原因をつきとめられてよかった。