スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

64bit版Windows7でmecabのjavaバインディングをコンパイル。

仕事でWindows上のJavaからMeCabの機能を使う必要がでてきたので
Windows用のMeCab-javaバインディングを使えるようにするまでの準備をメモしておく。
  1. mecabのインストール
  2. 必要なモジュールのダウンロード他。
    • Microsoft Windows SDK for Windows 7 and .NET Framework 4 をダウンロード
    • swigのダウンロード
      http://sourceforge.net/projects/swig/files/swigwin/swigwin-1.3.40/swigwin-1.3.40.zip/download
      上記からダウンロード。
    • mecabのソースコードのダウンロード
      http://mecab.sourceforge.net/src
      上記からダウンロード
    • mecab-javaのソースコードのダウンロード
      http://sourceforge.net/projects/mecab/files/mecab-win32/0.98/mecab-java-0.98.tar.gz/download
      上記からダウンロード
    • swig、mecab、mecab-javaのアーカイブファイルを同じディレクトリ内で展開する。
      適当なディレクトリ内にswig、mecab、mecab-javaのアーカイブを展開し、以下のような形になるようにしておく

      J:\Documents\mecab_work>dir

       ドライブ J のボリューム ラベルがありません。

       ボリューム シリアル番号は D055-050A です

       J:\Documents\mecab_work のディレクトリ

      2011/09/17  19:06    <DIR>          .

      2011/09/17  19:06    <DIR>          ..

      2011/09/17  19:44               274 make.bat

      2011/09/17  18:43    <DIR>          mecab-0.98

      2011/09/17  18:37         1,424,588 mecab-0.98.tar.gz

      2011/09/17  18:43    <DIR>          mecab-java-0.98

      2011/09/17  18:36            25,597 mecab-java-0.98.tar.gz

      2011/09/17  18:43    <DIR>          swigwin-1.3.40

      2011/09/17  18:38         6,788,894 swigwin-1.3.40.zip

                     4 個のファイル           8,239,353 バイト

  3. Mecabのソースコードにパッチを当てる。
    • VC++用のmakefileのテンプレートをコピーしてVC++用のMakefileを作成。

      J:\Documents\mecab_work> copy mecab-0.98\src\Makefile.msvc.in mecab-0.98\src\Makefile.msvc


    • mecab-0.98\src\Makefile.msvcの5行目を編集

      LDFLAGS = /nologo /OPT:REF /OPT:ICF /LTCG /NXCOMPAT /DYNAMICBASE /MACHINE:X86 ADVAPI32.LIB

      ↓↓↓↓
      LDFLAGS = /nologo /OPT:REF /OPT:ICF /LTCG /NXCOMPAT /DYNAMICBASE /MACHINE:X64 ADVAPI32.LIB

    • mecab-0.98\src\Makefile.msvcの7行目を編集

              -DDLL_EXPORT -DHAVE_GETENV -DHAVE_WINDOWS_H -DDIC_VERSION=@DIC_VERSION@ \

            ↓↓↓
              -DDLL_EXPORT -DHAVE_GETENV -DHAVE_WINDOWS_H -DDIC_VERSION=102 \

    • mecab-0.98\src\feature_index.cppの311行目を編集

      case 't':  os_ << (size_t)path->rnode->char_type;     break;
      ↓↓↓
      case 't':  os_ << (unsigned int)path->rnode->char_type;     break;

    • mecab-0.98\src\write.cppの236行目を編集

      case 'L': *os << std::strlen(sentence); break;
      ↓↓↓
      case
       'L': *os << (unsigned int)std::strlen(sentence); break;

    • mecab-0.98\src\common.hの19行目に以下を追加

      #include

    • mecab-0.98\src\mecab.hの254行目を変更

      #ifndef SIWG
      ↓↓↓
      #ifndef SWIG

    • さらに、259行目にあるversion()関数の宣言を254行目以下の#ifndefの中に入れる

      こうなっているものを
      #ifndef SWIG
        static Tagger* create(int argc, char **argv);
        static Tagger* create(const char *arg);
      #endif

        static const char *version();
      ↓↓↓
      こう変更する。
      #ifndef SWIG
        static Tagger* create(int argc, char **argv);
        static Tagger* create(const char *arg);
        static const char *version();
      #endif
  4. コンパイル用のバッチファイルを作る。
    • こんな感じのバッチファイルを作ってやる。

      cd mecab-0.98\src\
      call make.bat
      cd ..\swig
      ..\..\swigwin-1.3.40\swig.exe -java -package org.chasen.mecab -c++ MeCab.i
      cl /EHsc /LD /I ..\src /I %JAVA_HOME%\include /I %JAVA_HOME%\include\win32 MeCab_wrap.cxx ..\src\libmecab.lib
      move MeCab_wrap.dll MeCab.dll
      cd ..\..\

  5. コンパイル、ビルド
    • スタートメニューから専用のプロンプトを起動
      スタートメニューの[Microsoft Windows SDK v7.1]→[Windows SDK 7.1 Command Prompt]を選択し、
      Windows SDK用のコマンドプロンプトを立ち上げる。

      上記のアーカイブを展開したディレクトリに移動。
      cd J:\Documents\mecab_work
    • コンパイル、ビルド実行。
      make.batを実行。
      これで、
      mecab-0.98\src配下にlibmecab.dllが、
      meacb-java-0.98デイレクトリ配下にMeCab.dllができる。
      コレらをWindowsのパスが通った部分におけばJava側から
      Runtime.getRuntime().loadLibrary( "MeCab" );
      こんな感じでライブラリをロードできるはず。
  6. 参考にさせてもらったサイト。
    MeCabの64ビットコンパイル周り。  
    VC++2010でExpressで64ビットモジュールの作成、Windows SDK v7.1のダウンロード。
    MeCab-javaのコンパイル周り。
なんだかんだで結構めんどくさかった。上記3サイトが本当にわかりやすくてホント助かりました。
ちなみに、とりあえずライブラリをロードするってところまでは確認しましたが、まだMeCabの機能が問題ないことは確認していません。
スポンサーサイト

コメントの投稿

非公開コメント

プロフィール

ラム君(モヒカンVer)

Author:ラム君(モヒカンVer)
都内でプログラマのようなものをやっています。
まだまだ初心者ですがよろしくお願いします。

最新記事
最新コメント
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。