mingw で qdbm の拡張ライブラリをビルド
bsfilter で qdbm が使いたくなって頑張ってみた。
使ったのは
ruby-1.8.4-i386-mingw32
qdbm-1.8.75のソース
rbconfig.rb の編集
まずは RUBY_DIR/lib/ruby/1.8/i386-mingw32/rbconfig.rb をこんな感じで修正する。
こうしておくと mkmf.rb が作る Makefile が $(OBJ) の依存として $(top)/ruby.h とかが設定される。こうしないと素で ruby.h って書かれて make できないっぽかった。
--- rbconfig.rb.orig 2005-12-24 22:54:47.000000000 +0900 +++ rbconfig.rb 2007-03-21 08:50:06.648700800 +0900 @@ -143,6 +143,7 @@ CONFIG["sitelibdir"] = "$(sitedir)/$(ruby_version)" CONFIG["sitearchdir"] = "$(sitelibdir)/$(sitearch)" CONFIG["topdir"] = File.dirname(__FILE__) + CONFIG["RULE_SUBST"] = "$(topdir)/%s" MAKEFILE_CONFIG = {} CONFIG.each{|k,v| MAKEFILE_CONFIG[k] = v.dup} def Config::expand(val, config = CONFIG)
ビルド
qdbm-1.8.75のソースを展開して普通に
% ./configure && make
する。インストールはしない。
% ./configure && make && make install
する。これでおしまい。
これで作った qdbm拡張ライブラリは ruby-1.8.6-i386-mswin32 でも使えるみたいだ。
qdbm の dll とかは何となくバイナリパッケージのを使ってる。
ホントは mecab も使いたいんだけど、C++ のソースだとリンクに失敗するからあきらめてる。自分で mecab をビルドすればリンクできたけど、バイナリの dll と違うしなんとなくやな感じ。C だと大丈夫そうだから自分で同じAPIの拡張ライブラリを書けば大丈夫そうなんでそのうち頑張るかもしれない。C あんまり知らないし、拡張ライブラリ書いたことないから苦労しそうだけど。