[mecab-users 86] Re: C ライブラリで "Undefined symbol" となる関数がある

Back to archive index

Taku Kudo taku****@chase*****
2006年 4月 18日 (火) 03:15:44 JST


rsk様

ご報告ありがとうございます。

mecab 0.91 のアジェンダに追加しておきました。
次のバージョンで修正します。

On 4/16/06, rsk <rsky0****@gmail*****> wrote:
> はじめまして、rsk と申します。
>
> MeCab の PHP モジュールを作っている際に mecab_new2(), mecab_nbest_next_tostr2(),
> mecab_format_node() が利用できない現象に遭遇したので報告いたします。
>
> さらに libmecab を nm で調べてみたところ、本来 _mecab_new2 とあるべき箇所が
> __Z10mecab_new2Pc となっていました。他の2つの関数についても同様でした。
>
> 環境は、Mac OS X 10.4.6 (ppc) と FreeBSD 6.0 (i386) です。
>
> どうやら mecab.h にあるプロトタイプと libmecab.cpp のコードとで
> 返り値および引数の型が異なるのが原因のようで、以下のように修正すれば
> 上記のエラーが出ず、関数が利用できるようになりました。
> C言語を学び始めて間も無く、不備があるかもしれませんが参考になれば幸いです。
>
> --- mecab-0.90.orig/src/libmecab.cpp    2006-03-03 10:37:35.000000000 +0900
> +++ mecab-0.90/src/libmecab.cpp 2006-04-15 23:05:15.000000000 +0900
> @@ -63,7 +63,7 @@
>    return c;
>  }
>
> -mecab_t* mecab_new2 (char *arg)
> +mecab_t* mecab_new2 (const char *arg)
>  {
>    mecab_t *c = new mecab_t;
>    MeCab::Tagger *ptr = MeCab::createTagger(arg);
> @@ -165,10 +165,10 @@
>    return t->next ();
>  }
>
> -const char* mecab_nbest_next_tostr2 (mecab_t* c, char *out, size_t len2)
> +char* mecab_nbest_next_tostr2 (mecab_t* c, char *out, size_t len2)
>  {
>    MECAB_CHECK_FIRST_ARG(c,t);
> -  return t->next (out, len2);
> +  return const_cast<char *>(t->next (out, len2));
>  }
>
>  mecab_node_t* mecab_nbest_next_tonode (mecab_t* c)
> diff -ur mecab-0.90.orig/src/mecab.h mecab-0.90/src/mecab.h
> --- mecab-0.90.orig/src/mecab.h 2006-01-14 02:00:44.000000000 +0900
> +++ mecab-0.90/src/mecab.h      2006-04-15 22:58:18.000000000 +0900
> @@ -159,9 +159,9 @@
>    MECAB_DLL_EXTERN int           mecab_nbest_init          (mecab_t*,
> const char*);
>    MECAB_DLL_EXTERN int           mecab_nbest_init2         (mecab_t*,
> const char*, size_t);
>    MECAB_DLL_EXTERN const char*   mecab_nbest_next_tostr    (mecab_t*);
> -  MECAB_DLL_EXTERN char*         mecab_nbest_next_tostr2   (mecab_t*,
> const char*, size_t);
> +  MECAB_DLL_EXTERN char*         mecab_nbest_next_tostr2   (mecab_t*,
> char*, size_t);
>    MECAB_DLL_EXTERN mecab_node_t* mecab_nbest_next_tonode   (mecab_t*);
> -  MECAB_DLL_EXTERN const char*   mecab_format_node         (mecab_node_t*);
> +  MECAB_DLL_EXTERN const char*   mecab_format_node         (mecab_t*,
> mecab_node_t*);
>    MECAB_DLL_EXTERN int           mecab_tool                (int argc,
> char **argv);
>  #endif
>
> --
> /**
>  * Ryusuke SEKIYAMA
>  * rsky0****@gmail*****
>  */
> _______________________________________________
> mecab-users mailing list
> mecab****@lists*****
> http://lists.sourceforge.jp/mailman/listinfo/mecab-users
>
>



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