mecab-0.98 の Ruby バインディングを作成する(Windows)

mecab-ruby-0.98.tar.gz の MeCab_wrap.cpp はそのままだとエラーになったため、mecab-0.98.tar.gz から swigMeCab_wrap.cpp を生成した。

参考:

おおまかな流れ
  1. mecab-0.98 から swigMeCab_wrap.cpp を生成
  2. mecab-ruby-0.98 の MeCab_wrap.cpp と入れ替える
  3. mecab-ruby-0.98 で nmake

以上で MeCab.so の完成

swig の準備

swigwin-2.0.4.zip をダウンロードして展開し、パスを通す。

mecab-0.98

Makefile を編集

mecab-0.98\swig\Makefile
mv -f を move にする。
フォルダ mecab-0.98\ruby を作る。

mecab.h を編集

mecab-0.98\swig\mecab.h
SIWG を SWIG にする。
static const char *version(); を直近の #ifndef SWIG の中に入れる。

環境変数を設定
C:\mecab-0.98>"%VS100COMNTOOLS%vsvars32.bat"
nmake
C:\mecab-0.98\swig>nmake

mecab-0.98\rubyMeCab_wrap.cpp が生成されるので、mecab-ruby-0.98.tar.gz のものと入れ替える。

mecab-ruby-0.98

extconf.rb の書き換え

以下のように書き換える。
(パスは適宜読みかえて下さい)

require 'mkmf'

$CFLAGS += ' -IC:\Progra~2\MeCab\sdk'
$LOCAL_LIBS += ' libmecab.lib'
$LIBPATH << 'C:\Progra~2\MeCab\sdk'

have_header('mecab.h') && create_makefile('MeCab')

(ここでは mecab-0.98.exe が C:\Progra~2\MeCab にインストールされているという前提)

MeCab_wrap.cpp の編集

冒頭に下記を追加する。
#define _MSC_VER 1200
nmake
C:\mecab-ruby-0.98>ruby extconf.rb
C:\mecab-ruby-0.98>nmake

これで MeCab.so が生成される。