Linux下JNI的使用 测试
首先创建一个目录,并进入这个目录:
$ mkdir JNITest $ cd JNITest
创建NativeJava.java文件,并加入如下内容:
public class NativeJava { static { //"NativeC"是被调用的本地动态库,将在后面创建 System.loadLibrary("NativeC"); } public native static void printInNative(); }
然后编译NativeJava.java文件,并生成头文件
$ javac NativeJava.java $ javah NativeJava生成NativeJava.class和NativeJava.h两个文件.
接下来创建NativeC.c文件,加入如下内容:
#include "NativeJava.h" #include <stdio.h> JNIEXPORT void JNICALL Java_T_printInNative(JNIEnv *env, jobject obj) { printf("Test JNI transfer C\n"); }
编译NativeC.c文件,并生成动态链接库
(如果JAVA_HOME不存在则直接指定java所在的目录,生成的so文件名必须以lib做前缀)
$ gcc -I $JAVA_HOME/include -I $JAVA_HOME/include/linux -fPIC -c NativeC.c -o NativeC.o $ gcc -shared -Wl,-soname,libNativeC.so -o libNativeC.so NativeC.o
最后创建Java测试类来调用Native方法,创建Test.java文件
public class { public static void main(String[] args) { NativeJava.printInNative(); } }编译并执行Test.java
$ javac Test.java $ java -Djava.library.path=/home/cx/JNITest Test得到输出结果: Test JNI transfer C