[mecab-users 226] Re: mecab-0.94

Back to archive index

naoki iimura amatu****@users*****
2007年 2月 26日 (月) 18:57:37 JST


こんばんは、いいむらです。

Mac OS X 10.3.9(gcc 3.3)でも同じところでエラーが出ています。
gcc のバージョンは
gcc (GCC) 3.3 20030304 (Apple Computer, Inc. build 1671)
です。

エラーの内容は、

tokenizer.cpp: In member function `bool MeCab::TokenizerImpl<N, P>::open(const
   MeCab::Param&)':
tokenizer.cpp:104: error: parse error before `>' token
tokenizer.cpp:123: error: parse error before `>' token
tokenizer.cpp:167: error: parse error before `>' token
tokenizer.cpp:167: error: parse error before `)' token
tokenizer.cpp:169: error: parse error before `>' token
tokenizer.cpp:176: error: parse error before `>' token
make[2]: *** [tokenizer.lo] Error 1
make[1]: *** [all-recursive] Error 1
make: *** [all-recursive-am] Error 2

です。

あれこれ調べてみましたら、
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=795
というバグ情報に行き当たりました。

試しに、エラーの出ている 5 カ所をここに書かれているように変更してみた
ところ、無事コンパイルに成功しました。

このバグは gcc 3.4 で修正されているようですので、3.4 以降では問題ない
のだと思います。また、3.4 以降でもそのまま動きます。

変更内容は以下の通りです。

*** mecab-0.94/src/tokenizer.cpp-original	Sat Feb 24 18:58:39 2007
--- mecab-0.94/src/tokenizer.cpp	Mon Feb 26 18:18:24 2007
***************
*** 101,107 ****
    bool TokenizerImpl<N, P>::open(const Param &param) {
      close();

!     std::string prefix = param.get<std::string>("dicdir");

      CHECK_CLOSE_FALSE(unkdic_.open(create_filename
                                     (prefix, UNK_DIC_FILE).c_str()))
--- 101,107 ----
    bool TokenizerImpl<N, P>::open(const Param &param) {
      close();

!     std::string prefix = param.template get<std::string>("dicdir");

      CHECK_CLOSE_FALSE(unkdic_.open(create_filename
                                     (prefix, UNK_DIC_FILE).c_str()))
***************
*** 120,126 ****
      property_.set_charset(sysdic->charset());
      dic_.push_back(sysdic);

!     std::string userdic = param.get<std::string>("userdic");
      if (!userdic.empty()) {
        char buf[BUF_SIZE];
        char *_dic[BUF_SIZE];
--- 120,126 ----
      property_.set_charset(sysdic->charset());
      dic_.push_back(sysdic);

!     std::string userdic = param.template get<std::string>("userdic");
      if (!userdic.empty()) {
        char buf[BUF_SIZE];
        char *_dic[BUF_SIZE];
***************
*** 164,179 ****

      space_ = property_.getCharInfo(0x20);  // ad-hoc

!     bos_feature_.reset_string(param.get<std::string>("bos-feature"));

!     std::string tmp = param.get<std::string>("unk-feature");
      unk_feature_.reset(0);
      if (!tmp.empty()) unk_feature_.reset_string(tmp);

      CHECK_CLOSE_FALSE(*bos_feature_ != '\0')
        << "bos-feature is undefined in dicrc";

!     max_grouping_size_ = param.get<size_t>("max-grouping-size");
      if (max_grouping_size_ == 0)
        max_grouping_size_ = DEFAULT_MAX_GROUPING_SIZE;

--- 164,179 ----

      space_ = property_.getCharInfo(0x20);  // ad-hoc

!     bos_feature_.reset_string(param.template get<std::string>("bos-feature"));

!     std::string tmp = param.template get<std::string>("unk-feature");
      unk_feature_.reset(0);
      if (!tmp.empty()) unk_feature_.reset_string(tmp);

      CHECK_CLOSE_FALSE(*bos_feature_ != '\0')
        << "bos-feature is undefined in dicrc";

!     max_grouping_size_ = param.template get<size_t>("max-grouping-size");
      if (max_grouping_size_ == 0)
        max_grouping_size_ = DEFAULT_MAX_GROUPING_SIZE;


以上です。

-- 
naoki iimura (amatubu)
 e-mail: amatu****@mac*****
 web: http://amatubu.skr.jp/
 diary: http://d.hatena.ne.jp/amatubu/
 fingerprint: 1435 5892 86B7 D465 6DBF  DFD2 71E1 1AB3 F63F DF62



mecab-users メーリングリストの案内
Back to archive index