Cygwin1.7にMeCab0.98+MeCab-rubyをインストールしたメモ
インストール: MeCab 0.98
$ ./configure --with-charset=utf-8 CPPFLAGS=-DNOMINMAX LIBS=-liconv --prefix=/usr/local $ make $ make install
prefixつけた以外は参照ページと同じ。
CPPFLAGSオプションつけない時はmakeでこける(なんか文法エラーで……)。こけ方は以下。
[05-19 22:33:55] $ make make all-recursive make[1]: Entering directory `/cygdrive/c/home/build/mecab-0.98' Making all in src make[2]: Entering directory `/cygdrive/c/home/build/mecab-0.98/src' /bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -DDIC_VERSION=102 -DMECAB_DEFAULT_RC="\"/usr/local/etc/mecabrc\"" -O3 -Wall -c -o utils.lo utils.cpp libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -DDIC_VERSION=102 -DMECAB_DEFAULT_RC=\"/usr/local/etc/mecabrc\" -O3 -Wall -c utils.cpp -DDLL_EXPORT -DPIC -o .libs/utils.o In file included from /usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/sstream:640, from common.h:18, from utils.cpp:32: /usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/bits/sstream.tcc: In member function `virtual typename std::basic_stringbuf<_CharT, _Traits, _Alloc>::int_type std::basic_stringbuf<_CharT, _Traits, _Alloc>::overflow(typename _Traits::int_type)': /usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/bits/sstream.tcc:102: error: expected unqualified-id before '(' token /usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/bits/sstream.tcc:104: error: expected unqualified-id before '(' token make[2]: *** [utils.lo] Error 1 make[2]: Leaving directory `/cygdrive/c/home/build/mecab-0.98/src' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory `/cygdrive/c/home/build/mecab-0.98' make: *** [all] Error 2
MeCab-ruby
$ ruby extconfig.rb $ make $ make install
の手順だと、makeでこける。
[05-19 22:37:08] $ make g++ -I. -I. -I/usr/lib/ruby/1.8/i386-cygwin -I. -DHAVE_MECAB_H -g -O2 -I/usr/local/include -c MeCab_wrap.cpp gcc -shared -s -o MeCab.so MeCab_wrap.o -L. -L/usr/lib -L. -Wl,--enable-auto-image-base,--enable-auto-import,--export-all -lruby -lstdc++ -ldl -lcrypt MeCab_wrap.o: In function `_Z16new_MeCab_TaggerPKc': /cygdrive/c/home/build/mecab-ruby-0.98/MeCab_wrap.cpp:1866: undefined reference to `MeCab::createTagger(char const*)' /cygdrive/c/home/build/mecab-ruby-0.98/MeCab_wrap.cpp:1868: undefined reference to `MeCab::getTaggerError()' MeCab_wrap.o: In function `_Z16new_MeCab_Taggerv': /cygdrive/c/home/build/mecab-ruby-0.98/MeCab_wrap.cpp:1873: undefined reference to `MeCab::createTagger(char const*)' /cygdrive/c/home/build/mecab-ruby-0.98/MeCab_wrap.cpp:1874: undefined reference to `MeCab::getTaggerError()' MeCab_wrap.o: In function `_Z19_wrap_Tagger_createiPmm': /cygdrive/c/home/build/mecab-ruby-0.98/MeCab_wrap.cpp:4213: undefined reference to `MeCab::Tagger::create(char const*)' /cygdrive/c/home/build/mecab-ruby-0.98/MeCab_wrap.cpp:4178: undefined reference to `MeCab::Tagger::create(int, char**)' MeCab_wrap.o: In function `_Z20_wrap_Tagger_versioniPmm': /cygdrive/c/home/build/mecab-ruby-0.98/MeCab_wrap.cpp:4284: undefined reference to `MeCab::Tagger::version()' collect2: ld returned 1 exit status make: *** [MeCab.so] Error 1
mecabライブラリをうまく探してくれないのでリンク時にこけてる模様。やりかたがわからなかったのでruby extconf.rbで生成されるMakefileを直接編集して直した。
# before ldflags = -L. # ... LIBS = $(LIBRUBYARG_SHARED) -lstdc++ -ldl -lcrypt # after ldflags = -L. -L/usr/local/lib # ... LIBS = $(LIBRUBYARG_SHARED) -lstdc++ -ldl -lcrypt -lmecab
これでビルド可能