Kazuhiro Osawa
ko****@yappo*****
2005年 4月 19日 (火) 11:30:13 JST
大沢です。 FedoraCore3にて、Senna環境を構築をしてたのですがmecab-0.81.mte.patchを当てた libmecab.soが正常に動作しませんでした。 gcc -vの結果は下記のとおりです。 gcc version 3.4.2 20041017 (Red Hat 3.4.2-6.fc3) 下記のソースを mecab.c------------------------------------------ #include <mecab.h> int main () { char *arg[] = {"", "-Owakati"}; mecab_load_dictionary(2, arg); } ------------------------------------------ $ gcc -o mecab mecab.c -lmecab して $ gdb ./mecab (gdb) run としたら、下記のメッセージが表示され ------------------------------------------ Program received signal SIGSEGV, Segmentation fault. 0x006a325d in std::_Rb_tree<std::string, std::pair<std::string const, std::string>, std::_Select1st<std::pair<std::string const, std::string> >, std::less<std::string>, std::allocator<std::pair<std::string const, std::string> > >::insert_unique () from /usr/local/lib/libmecab.so.0 ------------------------------------------ (gdb) bt したら、下記のようになりました。 ------------------------------------------ #0 0x006a325d in std::_Rb_tree<std::string, std::pair<std::string const, std::string>, std::_Select1st<std::pair<std::string const, std::string> >, std::less<std::string>, std::allocator<std::pair<std::string const, std::string> > >::insert_unique () from /usr/local/lib/libmecab.so.0 #1 0x0069eeb6 in MeCab::Param::setProfile () from /usr/local/lib/libmecab.so.0 #2 0x006a1c85 in MeCab::Param::open () from /usr/local/lib/libmecab.so.0 #3 0x006b508d in MeCab::SharedResource::open () from /usr/local/lib/libmecab.so.0 #4 0x006b8d15 in MeCab::SharedResourceOpen () from /usr/local/lib/libmecab.so.0 #5 0x006bf9ca in mecab_load_dictionary () from /usr/local/lib/libmecab.so.0 #6 0x0804849c in main () ------------------------------------------ mecabのsrc/param.cppのconf変数に値を入れる時にエラーが出ているようなので conf.clear()してみたり色々やっているうちに mecab-0.81.mte.patchにpatchを当てる事で正常に動作するようになりました。 mecab-0.81.mte.patch.patch------------------------------------------ --- mecab-0.81.mte.patch 2005-04-11 10:19:25.000000000 +0900 +++ mecab-0.81.mte.patch.patch 2005-04-18 19:09:23.140384355 +0900 @@ -482,7 +482,7 @@ + + bool SharedResource::open(int argc, char** argv) + { -+ if (opened) close(); ++ opened = true;close(); + if (! param.open (argc, argv, long_options)) { + return false; + } ------------------------------------------ 正直STLには疎いので、この対処方で良いのかどうか分りませんが 応急処置という事で。。。 --- osawa