1. 建立JniTest.java:
public class JniTest {
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 <stdio.h>
#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.