2010-12-11

[メモ]MinGW/MSYS 環境で Kyoto Cabinet Core & Java バインディングをビルドする

Posted on 2010-12-11, 2:26 in
本家から Windows 版がでた今となっては全く不要な記事となりましたが、せっかく書いたので残しておきます。

対象バージョン


1. 準備

Kyoto Cabinet のビルドを始める前に、依存ライブラリ regex と zlib をビルド&インストールする必要があります。

1.1 regex のビルド・インストール

上記 URL からダウンロードした regex の tarball を展開し、展開先ディレクトリにて
$ ./configure
$ make
 を実行します。make が終わったら、スタティックな libregex.a を作るため、
$ rm libregex.a
$ ar rcs libregex.a regex.o
 とします。その後、
$ make install
を実行し、regex のビルド・インストールは完了です。

1.2 zlib のビルド・インストール

zlib の tarball を展開した先のディレクトリにて、
$ make -f win32/Makefile.gcc
とし、Windows/gcc 環境用の Makefile を用いて make します。インストールの際は以下のように、事前に INCLUDE_PATH、LIBRARY_PATH の環境変数を定義する必要があります。
$ export INCLUDE_PATH=/usr/local/include
$ export LIBRARY_PATH=/usr/local/lib
$ make -f win32/Makefile.gcc install
以上で準備は完了です。

2. Kyoto Cabinet core library のビルド・インストール

g++ に渡すオプションを、以下のとおり定義します。
$ export CPPFLAGS=-D_WIN32_WINNT=0x0501
あとは、kyotocabinet の tarball 展開先ディレクトリにて、
$ ./configure
$ make
$ make check
$ make install
として、ビルド&インストールが完了します。

3. Kyoto Cabinet Java バインディングのビルド・インストール

3.1 準備

Kyoto Cabinet Java バインディングをビルドする前に、JDK をインストールした先のディレクトリの情報を MSYS の fstab ファイルに追記する必要があります。

fstab ファイルは、(MinGW のインストールルート)\msys\1.0\etc ディレクトリに配置されています。以下は、"C:\Program Files\Java" ディレクトリに JDK をインストールした場合の追記内容の例です。
C:\Progra~1\Java\jdk1.6.0_18 /java
上記のように、JDK をインストールした先のパスの途中に空白を含むディレクトリが存在する場合、チルダ ~ を使ってそのディレクトリ名を表記する必要があるようです(ダブルクォーテーションで括っても、MSYS は認識してくれません)。

3.2 ビルド&インストール

./configure を実行する前に、環境変数 JAVA_HOME を定義し (直し) ます。
$ export JAVA_HOME=/java
JAVA_HOME を定義したら kyotocabinet-java の tarball 展開先で
$ ./configure
とします。./configure が完了したら、出力された Makefile を一部修正します。以下のようにターゲット libjkyotocabinet.so.$(LIBVER).$(LIBREV).0 の内容に、jkyotocabinet.dll を生成するためのコマンドを追記します。
libjkyotocabinet.so.$(LIBVER).$(LIBREV).0 : $(LIBOBJFILES)
 $(CXX) $(CXXFLAGS) -shared -Wl,-soname,libjkyotocabinet.so.$(LIBVER) -o $@ \
   $(LIBOBJFILES) $(LDFLAGS) $(LIBS)
 ##### 以下の2行を追記する #####
 $(CXX) $(CXXFLAGS) -shared -Wl,--kill-at -Wl,-soname,jkyotocabinet.dll -o jkyotocabinet.dll \
   $(LIBOBJFILES) $(LDFLAGS) $(LIBS)
本来なら CPPFLAGS などの環境変数で解決したい内容なのですが、何故か kyotocabinet-java の ./configure では環境変数が反映されないようなので、やむを得ずこのような work around をしています。さて、Makefile の編集が終わったところで、
$ make
$ make check
とします。なお、make check は
make DBNAME="*" RNUM="10000" check-each
のテストの実行時にエラーになってしまうようです。この問題はまだ解消できていませんが、普通に利用する分には支障はないのかな、と思います。

後は、生成された jkyotocabinet.dll と kyotocabinet.jar を利用すれば、Windows 上でも Java から Kyoto Cabinet が使えるようになることでしょう(試していません…)。

0 コメント:

コメントを投稿