1. 创建JniTest.java:
static {
System.loadLibrary("hello");
}
public native void say();
public static void main(String[] args) {
System.out.println("I'm in Java");
new JniTest().say();
}
}
2.编译JniTest.java并生成Native头文件:
javac JniTest.java
javah -jni JniTest
3. 根据JniTest.h中的函数原型,创建hello.c文件:
#include "JniTest.h"
JNIEXPORT void JNICALL Java_JniTest_say(JNIEnv *env, jobject obj)
{
printf("I'm in c/c++\n");
}
4. 为方便编译,生成一个Makefile文件:
Makefile:
.PHONY: all
all:
javac JniTest.java
gcc --shared -I /usr/lib/jvm/java-6-openjdk-i386/include hello.c -o libhello.so
5. 编译make,并执行:
java -Djava.library.path=. JniTest
注:如不指明libray路径,将报错:
[ancoo@ubuntu jnitest]$ java JniTest
Exception in thread "main" java.lang.UnsatisfiedLinkError: no hello in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1738)
at java.lang.Runtime.loadLibrary0(Runtime.java:823)
at java.lang.System.loadLibrary(System.java:1028)
at JniTest.<clinit>(JniTest.java:4)
Could not find the main class: JniTest. Program will exit.