ツール群

CygwinでのMeCab-0.98のビルドとmecab-rubyの導入 - ツール群

導入

作業内容

  1. ソースを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
  2. makeがすんなり通る
    $ make
    $ make install
  3. 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
  4. すると怒られる
    $ 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
  5. 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')
  6. 再度ruby extconf.rbしてmake
    $ ruby extconf.rb
    $ make
    $ make install
  7. おつかれさまでした

テスト

$ ruby test.rb

すると怒られるので,test.rbにエンコーディングの設定を記述

$ vim test.rb
すべて開くすべて閉じる
  1
  2
  3
-
|
!
#!/usr/bin/ruby
# -*- encoding: utf-8 -*-
...(略)

まとめ

  • Cygwinがややこしいのかと思ったらMeCab側の問題もあるみたい
  • Cygwinでやるメリットあんまりなさげ

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2012-11-04 (日) 21:29:23 (1814d)