先日、GrailsのDBをSQLiteに対応させようといろいろ試したときに、メジャーな(?)SQLiteのzentus版では2回目のGrails起動でドライバが未実装のメソッドを叩いて例外がスローされ停止する問題がありました。
id:torutk:20090711
gwenn版SQLiteJDBCドライバは、zentus版で未実装のメソッドが実装されているので、それをビルドして使用しました。
gwenn版は、SQLiteのアクセスにJavaから各OS/CPU毎に異なるネイティブライブラリを呼び出しています(大半のSQLiteJDBCがそうですが)。そのため、Javaの他に、対象OS/CPUに合わせてネイティブライブラリのソースをビルドしなくてはなりません。
昨日の日記には簡単にLinuxでのビルドをメモしましたが、今回は、Linux x86とWindows 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版なども含めるとよいのでしょうが、環境・手間等でここまでどしました。