めちゃくちゃ苦労したのでメモ。
形としては,Windows(Cygwin)ではライブラリとしてso形式のものが使えない(らしい)ので,dllを作成して動かすことに。
(Linux版をcygwinで動かそうとするとこれで引っかかる。)
但し本体のconfigureと辞書の生成作業でCygwinも必要。
ちなみによく分からずに進めたので間違いだらけかも。
▼必要なもの(末尾の括弧内は自分が試したバージョン)
- MeCab本体(Windows版ではなくSource),IPA辞書,Javaバインディング(0.97)
- Visual C++ 2008 Express Editions
- Microsoft Platform SDK(x86)
- Cygwin環境:MeCab本体のconfigureと辞書生成に使用
- SWIG(swigwinことWindows版でOK,win 1.3.36)
- JDK(1.6.0_04)
▼インストール作業
- VC++とMS Platform SDK
参考:Clair de lune - [コンパイラ]Microsoft Windows + Visual C++ 2008 Express Edition - ラグナロクオンライン > サーバー構築 - 記事一覧 - SWIG
swigwinを落として適当な場所に解凍するだけ。
パス設定も特に不要。 - libiconv
結局これ使ったんだったかなぁ。
記憶が曖昧なんだけど,もしMeCabのコンパイル?で止まる場合は入れてみるとよいかも。
参考:rubyneko - cygwinにmecabをutf8で導入
▼MeCabライブラリのビルド
参考:twist-bend coupling: MeCabのPythonバインディングをWindowsでビルド
- MeCab本体(mecab-0.97.tar.gz)の準備
Cygwinでconfigure後,VC++のnmakeを利用。- DLしたものを適当なところ(D:/cygwin/tmp/)に置く。
- 解凍~configure
=== Cygwin ===
$ tar zxvf mecab-0.97.tar.gz
$ cd mecab-0.97
$ ./configure - mecab-0.97/src/make.bat内の各種パス記述を修正。
インストールしたVC++等に合わせる。
VC++のバージョンと,ドライブレターあたりを直せば多分OK。 - vsvars32.bat(環境設定)を実行してからmake.batを実行。
参考:smashonline @ ウィキ - nmake=== DOS prompt ===
> cd D:\\cygwin\\tmp\\mecab-0.97\\src
> "D:\\Program Files\\Microsoft Visual Studio 9.0\\Common7\\Tools\\vsvars32.bat"
> make.batなにやら大量にwarningが出るけど大丈夫ぽい。
srcフォルダに大量のファイルが生成される。
- Javaバインディングの準備
用意されてるバインディング(MeCab_wrap.cxx)だとちゃんと動かないので,SWIGを使って自分で再構築。
それをビルドしてライブラリを生成する。- DLしたものを適当な場所(D:/cygwin/tmp/)に置き,解凍。
=== Cygwin ===
$ tar zxvf mecab-java-0.97.tar.gzといっても使うのは実質テスト用のtest.javaだけ。
- MeCab本体フォルダのmecab-0.97/src/mecab.hを編集。
253行目「#ifndef SIWG」を「#ifndef SWIG」に。
さらにその下も#ifndefで囲む。=== mecab.h ===
#ifndef SWIG
static const char *version();
#endif - SWIG処理。
makefileを参考に以下を実行してMeCab_wrap.cxx他を生成。=== DOS prompt ===
> cd D:\\cygwin\\tmp\\mecab-0.97\\swig
> (swig解凍ディレクトリ)\\swig -java -package org.chasen.mecab -c++ MeCab.i - 生成されたMeCab_wrap.cxxで,1.で解凍された同名ファイルを上書き。
- ビルド。MeCab_wrap.dllを生成。
同梱のmakefileはLinux用でso形式のライブラリを生成してしまうので,以下のように手動で。=== DOS prompt ===
> cl /EHsc /LD /I D:\\cygwin\\tmp\\mecab-0.97\\src /I D:\\Programs\\Java\\jdk1.6.0_04\\include /I D:\\Programs\\Java\\jdk1.6.0_04\\include\\win32 MeCab_wrap.cxx D:\\cygwin\\tmp\\mecab-0.97\\src\\libmecab.lib
- DLしたものを適当な場所(D:/cygwin/tmp/)に置き,解凍。
- 動作確認
とりあえず辞書やフォルダ配置はおいておいて,動くかどうかをバージョン出力で確認。- SWIGでできた*.javaをmecab-java-0.97/org/chasen/mecab/内に移動(解凍で出てきているものを上書き)。
- mecab-java-0.97/にmecab-0.97/src/のlibmecab.dllを移動。
- test.javaの8行目で読み込むライブラリ名を変更。
=== test.java ===
System.loadLibrary("MeCab_wrap");# もしくはMeCab_wrap.dllを「MeCab.dll」に名前変更しておけば,上記は不要。(こっちのが後々楽かも。)
- test.javaをコンパイル~実行。
バージョン情報部分だけでも出力されればOK。
(辞書設定をしていないので,以降はエラーになるはず。)=== DOS prompt ===
> javac -encoding utf8 test.java
> java test
0.97
(以降エラー)
▼その他
以下はかなりいい加減なメモ。
- 辞書のインストール
実はこれちゃんとやっていなくて,以前入れてそのままだったWindows版MeCab(辞書付き)の影響で,特に設定せずとも↑のテストで動作してしまった。
Win版インストールの時点で,レジストリに?辞書のパスが記憶されるのかも。
(ただし文字コードの関係で文字化けしてた。)
そこで,Linux用のIPA辞書をcygwinでconfigure(必要に応じて文字コード設定のオプションを ./configure -with-charset=utf8 とか)~makeして生成される辞書ファイル群で,Win版辞書が入っているディレクトリの中身を置き換えたところ,文字化けも解消された。
# でも別PCではうまくいかんかった。なんでだろう・・ - Eclipseでの利用
必要なのはMeCab_wrap.dll, libmecab.dll, MeCab.jarの3つだけ(+辞書)。- ライブラリ読み込み
MeCab_wrap.dllとlibmecab.dllの二つを,インストール済みJREのbinディレクトリ(D:/Programs/Java/jre1.6.0_04/bin/とか)に入れる。
これでjava.lang.UnsatisfiedLinkError: no ○○ in java.library.path / Can't find dependent librariesといったエラーは回避できるはず。
強引なやり方。 - JARの読み込み
mecab-javaディレクトリにて=== DOS prompt ===
> jar cfv MeCab.jar org/chasen/mecab/*.classで生成されるJARを,Eclipseにて「外部JARの追加」で。
- ライブラリ読み込み