JavaでJNIを使ってみる(2)
※実経験の記憶を頼りに自宅の PC 環境(VMWareなど)で再現している内容もあるのでご注意下さい
2007-11-15
前回、「JavaでJNIを使ってみる(1)」で JNI の概要をまとめたので、今回は実際にライブラリの作成をしてみます。最初は、Cygwin 上で gcc を使って dll を作成します。
早速の注意事項として、${JAVA_HOME}\include\win32\jni_md.h の型マッピングの定義が一致しないので対応しないといけません。対応方法は、gcc 実行時に引数として -D__int64='long long' を定義する方法と、jni_md.h の jlong の定義を直接書き換える方法があります。
(例)-D__int64='long long' を定義する方法 gcc -D__int64='long long' (例)jni_md.h の jlong の定義を書き換える方法 #ifdef __GNUC__ typedef long long jlong; #else typedef __int64 jlong; #endif
まずはコンパイルで sample.o ファイルを生成します。gcc の -m はコンフィグ依存のオプションで、 no-cygwin によって Cygwin DLL とリンクしないように指定しています。
gcc -c -mno-cygwin -shared -D__int64='long long' \ -I"C:/Program Files/Java/jdk1.5.0_13/include" \ -I"C:/Program Files/Java/jdk1.5.0_13/include/win32" \ sample.cpp
sample.o ができたら、さらにコンパイルして dll を生成します。
dllwrap -mno-cygwin --add-stdcall-alias -mwindows --target=i386-mingw32 \ -o sample.dll -s sample.o
これで、dll の作成ができたので早速 Java プログラムを実行してみます。コマンドラインからの実行方法は、java [クラス名] です。次回は、Linux と Mac で使用するライブラリの作成方法についてまとめます。
関連記事
上記の記事に関連する記事(最新の10件)です。


