1. 声明native方法
HelloWorld.java
class HelloWorld { private native void print(); public static void main(String[] args) { new HelloWorld().print(); } static { System.loadLibrary("HelloWorld"); } }
2. 编译Java文件
$ javac HelloWorld.java会生成HelloWorld.class文件。
3. 生成native方法的头文件
$ javah -jni HelloWorld会生成HelloWorld.h文件。
4. 实现本地方法
HelloWorld.c
#include <jni.h> #include <stdio.h> #include "HelloWorld.h" JNIEXPORT void JNICALL Java_HelloWorld_print(JNIEnv *env, jobject obj) { printf("Hello World!\n"); return; }
5. 编译生成动态库文件
在OSX下为jnilib文件。
$ gcc -I/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/include/ -I/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/include/darwin/ -c HelloWorld.c $ gcc -dynamiclib -o libHelloWorld.jnilib HelloWorld.o会生成HelloWorld.o和libHelloWorld.jnilib文件。
6. 执行
$ java -Djava.library.path=. HelloWorld HelloWorld!
7. 参考:
javah生成带有包名的头文件
(完)