torutkのブログ

ソフトウェア・エンジニアのブログ

gwenn版SQLite3用JDBCドライバのビルド(詳細)

先日、GrailsのDBをSQLiteに対応させようといろいろ試したときに、メジャーな(?)SQLiteのzentus版では2回目のGrails起動でドライバが未実装のメソッドを叩いて例外がスローされ停止する問題がありました。
id:torutk:20090711

gwenn版SQLiteJDBCドライバは、zentus版で未実装のメソッドが実装されているので、それをビルドして使用しました。

gwenn版は、SQLiteのアクセスにJavaから各OS/CPU毎に異なるネイティブライブラリを呼び出しています(大半のSQLiteJDBCがそうですが)。そのため、Javaの他に、対象OS/CPUに合わせてネイティブライブラリのソースをビルドしなくてはなりません。

昨日の日記には簡単にLinuxでのビルドをメモしましたが、今回は、Linux x86Windows x86の2つを含めるビルドを実施しました。

Linux版のビルド

http://github.com/gwenn/sqlitejdbc/tree からダウンロードしたソースファイルアーカイブを作業ディレクトリに展開します。

$ unzip gwenn-sqlitejdbc-b0e25f33fc09b15e8c6bbf0689655f278b0e5fb8.zip
$ cd gwenn-sqlitejdbc-b0e25f33fc09b15e8c6bbf0689655f278b0e5fb8
$ make
    :
$ cd build
$ mv Default-i686/libsqlitejdbc.so linux-x86.lib
$ jar uf sqlite-jdbc-v054-native.jar linux-x86.lib
$

Windows版ネイティブライブラリのビルド

用意されているMakefileは、MinGW GCCコンパイルする設定になっています。Cygwinでビルドするときは、Makefile関係を少し修正します。gwenn版ソースを展開し、中に含まれるMakefile.commonファイルを修正します。

--- Makefile.common.orig        2009-07-13 09:32:56.925067400 +0900
+++ Makefile.common     2009-07-12 04:54:04.879106700 +0900
@@ -70,9 +70,9 @@
 Darwin_LINKFLAGS := -dynamiclib $(Support10_4)
 Darwin_LIBNAME   := libsqlitejdbc.jnilib

-Win_CC           := $(arch)-mingw32msvc-gcc
-Win_STRIP        := $(arch)-mingw32msvc-strip
-Win_CFLAGS       := -D_JNI_IMPLEMENTATION_ -Ilib/inc_win -O
+Win_CC           := gcc
+Win_STRIP        := strip
+Win_CFLAGS       := -D_JNI_IMPLEMENTATION_ -Ilib/inc_win -O -mno-cygwin
 Win_LINKFLAGS    := -Wl,--kill-at -shared
 Win_LIBNAME      := sqlitejdbc.dll  

Cygwin上でmakeを実行します。

$ make
    :
$ cd build
$ mv Win-i686/sqlitejdbc.dll win-x86.lib
$ 

ここで作成したwin-x86.libを、Linux版でビルドしたJARファイルの中に追加します。

$ scp win-x86.lib ......

Linux側で、先ほど作成したJARに追加します。

$ jar uf sqlitejdbc-v054-native.jar win-x86.lib
$

これで、gwenn版SQLiteJDBCドライバのWindows x86版・Linux x86版同梱バージョンがビルドできました。
本来は、各64bit版やMax OS X版なども含めるとよいのでしょうが、環境・手間等でここまでどしました。