「Java」Windows 環境で JNI

Windows 環境で JNI を試してみたので、その時のメモ。

手順は以下でやりました。
1. Java ソースの作成
2. ヘッダファイルの生成
3. C 側のソースを作成
4. DLL ファイルの生成


1. Java ソースの作成

class Hello {
	public native void hello();
	
	public static void main(String[] args) {
		System.loadLibrary("Hello");
		Hello inst = new Hello();
		inst.hello();
	}
}

ソースファイルは javac でコンパイルしておく。


2. ヘッダファイルの生成

javah Hello


3. C 側のソースを作成

#include "Hello.h"

JNIEXPORT void JNICALL Java_Hello_hello(JNIEnv *env, jobject obj)
{
	printf("Hello !!\n");
}

「Hello !!」と表示するだけの簡単なプログラム。


4. DLL ファイルを生成

cl /I "C:\Program Files (x86)\Java\jdk1.6.0_30\include" /I "C:\Program Files (x86)\Java\jdk1.6.0_30\include\win32" /LD Hello.c

cl.exe コンパイラを使用してます。
jni.h と jni_md.h が必要みたいなので、/I ( 追加インクルードディレクトリ ) で、
"C:\Program Files (x86)\Java\jdk1.6.0_30\include" と "C:\Program Files (x86)\
Java\jdk1.6.0_30\include\win32" を指定している。
コンパイルが正常したら、"Hello.dll" てなファイルが生成されているはず。


上記で準備は完了。後は、以下のコマンドで実行すると「Hello !!」と表示されるはず。

java -Djava.libraryu.path=[ Hello.dll が存在するディレクトリ ] Hello


■ 環境
Windows 7 SP1
Java SE 6 Update 30 ( 32bit )
cl.exe ( 32bit )

※ 試してないですが、Java と cl コンパイラアーキテクチャが違えば、うまく動かないはずです。たぶん。。。

以上です。