KyotoCabinetのruby拡張をmingwでビルド(2)
RubyInstaller(x64)のRubyでkyotocabinetの拡張を使うためにビルドしようとしたが、なかなかうまくいかなかった。
結局、かなり滅茶苦茶なやり方でビルドしたので、自分以外の役には立たないかもしれない。
1.準備
2. Kyoto Cabinet のビルド・インストール
kyotocabinet-1.2.76.tar.gzをダウンロード、展開。
configureを編集 (置換)
/usr/local/include → /mingw64/include
/usr/local/lib → /mingw64/lib
kcthread.ccの編集 (置換)
(::DWORD)opq_ → (::DWORD_PTR)opq_
ビルド
./configure --prefix=/mingw64 --enable-lzo make make install
3. KyotoCabinet の ruby拡張をビルド・インストール
kyotocabinet-ruby-1.32.tar.gzをダウンロード、展開。
各種ファイルの編集
・extconf.rbとtest.rbの Config を RbConfig に置換。
・kyotocabinet.ccの「#define _KC_YARV_」をコメントアウト。
(※ちなみにrb_thread_blocking_regionの所をrb_thread_call_without_gvlで書き直してみたら、test.rbでbugに遭遇。)
ruby extconf.rb
でMakefileを作成。
ここのrubyは、RubyInstallerでインストールしたruby。
パスが通ってなかったら、/c/ruby23-x64/bin/ruby みたいに書けばいいはず。
MakefileのLIBSを編集して、ビルド
余計なdllを必要としないように試行錯誤。
LIBS = $(LIBRUBYARG_SHARED) -lkyotocabinet -llzo2 -lz -lregex -lstdc++ -lpthread -lm -lshell32 -lws2_32 -liphlpapi -limagehlp -lshlwapi
↑この部分を、↓に書き換え。
LIBS = $(LIBRUBYARG_SHARED) -lkyotocabinet -lz -static-libgcc -Wl,-Bstatic -llzo2 -lregex -lstdc++ -lpthread -lm -Wl,-Bdynamic -lshell32 -lws2_32 -liphlpapi -limagehlp -lshlwapi
ビルド、テスト
make make install ruby test.rb
テストはwickedの所が全部failed。大丈夫なのかな?