「Java」Linux 環境で JNI その1
Linux 環境で JNI を使ってみたので、その時もメモ。
手順は以下の感じでやった。
1. Java ソースの作成
2. ヘッダファイルの生成
3. C 側のソース作成
4. 共有ライブラリを作成
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. 共有ライブラリを作成
gcc -shared -I /usr/local/java/jdk1.6.0_30/include/ -I /usr/local/java/jdk1.6.0_30/include/linux/ Hello.c -o libHello.so
jni.h と jni_md.h が必要みたいなので、"-I" オプションで $JAVA_HOME/include/ と
$JAVA_HOME/include/linux/ を指定する。
上記で準備は完了。後は、以下のコマンドで実行すると「Hello !!」と表示されるはず。
java -Djava.library.path=[ libHello.so の存在するディレクトリ ] Hello
"-Djava.library.path" で共有ライブラリ ( この場合 libHello.so ) のある場所を指定する。
※ ちなみに、環境変数 LD_LIBRARY_PATH で指定しておいてもうまくいく。
■ 環境情報
CentOS 6.2
Java SE 6 Update 30
今回は以上。
今度は、「引数渡す」、「C 側から戻り値がある」とかやってみたい。
あと、Windows 環境でも試してみたいと思う。