JNI
JavaをCで拡張するJNIに挑戦してみた
Javaクラスを作成
public class Sample {
static {
System.loadLibrary("SampleJNI");
}
public native String say();
public static void main(String[] args) {
System.out.println(new Sample().say());
}
}
作成後は普通にコンパイル
ヘッダーファイルを生成する
javah -jni Sample
実行するとSample.hが生成される
C(C++)のソースを作成
#include "Sample.h"
JNIEXPORT jstring JNICALL Java_Sample_say(JNIEnv *env, jobject obj) {
return env->NewStringUTF("Hello World!!");
}
コンパイル
以下を実行してコンパイル
gcc -fPIC -I/path/to/java/include -I/path/to/java/include/linux -g -c SampleJNI.cpp
んで以下のコマンドを実行して共有ライブラリ形式にする
gcc -shared -lstdc++ -o libSampleJNI.so SampleJNI.o
実行する際には生成した共有ライブラリのパスをLD_LIBRARY_PATHに追加してから実行する
※-lstdc++省くとundefined symbol: __gxx_personality_v0
というエラーが発生する