Linux下JNI的使用 测试

14年前
首先创建一个目录,并进入这个目录:
$ 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