JNI.java
package xunw;
public class JNI{
//使用JNI的关键字native
//这个关键字决定我们那些方法能在我们的C文件中使用
//只须声明,不必实现
public native void display();
public native double sum(double x,double y);
static {
System.out.println(System.getProperty("java.library.path"));
System.loadLibrary("xunw_JNI");
}
public static void main(String[] args) {
new JNI().display();
System.out.println(new JNI().sum(2.0, 3.0));
}
}
javac xunw/JNI.java 并 javah xuw.JNI编译后会生成xunw_JNI.h xunw_JNI.c 编辑xunw_JNI.c
#include <jni.h>
//导入我们需要实现的本地方法
#include "xunw_JNI.h"
#include <stdio.h>
JNIEXPORT void JNICALL Java_xunw_JNI_display(JNIEnv *env, jobject obj)
{
printf("Hello World JNI!!");
return;
}
JNIEXPORT jdouble JNICALL Java_xunw_JNI_sum(JNIEnv *env, jobject obj, jdouble a, jdouble b)
{
return a + b;
}
将xunw_JNI.c 编译为动态链接库lib***.so 注意命名规则
gcc xunw_JNI.c -I /home/xunw/jdk1.8.0_05/include/ -I /home/xunw/jdk1.8.0_05/include/linux/ -fPIC -shared -o libxunw_JNI.so
libxunw_JNI 与System.loadLibrary("xunw_JNI")保持一致
运行程序主程序 JNI
java -Djava.library.path=~/workspace/LearnJava/src/ -classpath . xunw.JNI //error 不能用~
java -Djava.library.path=/home/xunw//workspace/LearnJava/src/ -classpath . xunw.JNI //ok