ツール群
CygwinでのMeCab-0.98のビルドとmecab-rubyの導入 - ツール群 †
導入 †
作業内容 †
- ソースをwgetしてきて解凍,configure
$ wget http://mecab.googlecode.com/files/mecab-0.98.tar.gz
$ tar zxvf mecab-0.98.tar.gz
$ cd mecab-0.98
$ ./configure --with-charset=utf-8 --enable-utf8-only LIBS=-liconv CPPFLAGS=-DNOMINMAX
- makeがすんなり通る
$ make
$ make install
- mecab-rubyをwget,extconf.rbでconfigure,make
$ cd ..
$ wget http://mecab.googlecode.com/files/mecab-ruby-0.98.tar.gz
$ tar zxvf mecab-ruby-0.98.tar.gz
$ cd mecab-ruby-0.98
$ ruby extconf.rb
$ make
- すると怒られる
$ make
g++ -I. -I/usr/include/ruby-1.9.1/i386-cygwin -I/usr/include/ruby-1.9.1/ruby/backward -I/usr/include/ruby-1.9.1 -I. -DHAVE_MECAB_H -ggdb -O2 -pipe -fno-strict-aliasing -I/usr/local/include -ggdb -O2 -pipe -fno-strict-aliasing -o MeCab_wrap.o -c MeCab_wrap.cpp
g++ -shared -o MeCab.so MeCab_wrap.o -L. -L/usr/lib -L. -Wl,--export-all-symbols -Wl,--enable-auto-image-base,--enable-auto-import -lruby191 -lstdc++ -lpthread -lrt -ldl -lcrypt
MeCab_wrap.o: In function `_wrap_Tagger_create__SWIG_0':
/cygdrive/c/Users/yuichi/tmp/mecab-ruby-0.98/MeCab_wrap.cpp:4178: undefined reference to `MeCab::Tagger::create(int, char**)'
MeCab_wrap.o: In function `_wrap_Tagger_create__SWIG_1':
/cygdrive/c/Users/yuichi/tmp/mecab-ruby-0.98/MeCab_wrap.cpp:4213: undefined reference to `MeCab::Tagger::create(char const*)'
MeCab_wrap.o: In function `_wrap_Tagger_version':
/cygdrive/c/Users/yuichi/tmp/mecab-ruby-0.98/MeCab_wrap.cpp:4284: undefined reference to `MeCab::Tagger::version()'
MeCab_wrap.o: In function `_Z16new_MeCab_TaggerPKc':
/cygdrive/c/Users/yuichi/tmp/mecab-ruby-0.98/MeCab_wrap.cpp:1866: undefined reference to `MeCab::createTagger(char const*)'
/cygdrive/c/Users/yuichi/tmp/mecab-ruby-0.98/MeCab_wrap.cpp:1868: undefined reference to `MeCab::getTaggerError()'
MeCab_wrap.o: In function `_Z16new_MeCab_Taggerv':
/cygdrive/c/Users/yuichi/tmp/mecab-ruby-0.98/MeCab_wrap.cpp:1873: undefined reference to `MeCab::createTagger(char const*)'
/cygdrive/c/Users/yuichi/tmp/mecab-ruby-0.98/MeCab_wrap.cpp:1874: undefined reference to `MeCab::getTaggerError()'
collect2: ld はステータス 1 で終了しました
Makefile:208: recipe for target `MeCab.so' failed
make: *** [MeCab.so] Error 1
- libmecabとリンクできてないっぽいので,extconf.rbに以下を追記
$ vim extconf.rb
1
2
3
4
5
6
|
| ...(略)...
$CFLAGS += ' ' + `#{mecab_config} --cflags`.chomp
$LDFLAGS = '-L/usr/local/lib'
$LIBS += ' -lmecab'
have_header('mecab.h') && create_makefile('MeCab')
|
- 再度ruby extconf.rbしてmake
$ ruby extconf.rb
$ make
$ make install
- おつかれさまでした
テスト †
$ ruby test.rb
すると怒られるので,test.rbにエンコーディングの設定を記述
$ vim test.rb
まとめ †
- Cygwinがややこしいのかと思ったらMeCab側の問題もあるみたい
- Cygwinでやるメリットあんまりなさげ