第一步.首先,我们先写个JAVA类:
public class HelloJNI {
static {
System.loadLibrary("HelloWorld"); //链接库的名字
}
public native static void setNum(int num); //链接库的方法
public native static int get();//链接库的方法
public static void main(String[] args) {
HelloJNI test = new HelloJNI();
test.setNum(666);
System.out.println(test.get());
}
}
第二步.进行编译: javac HelloJNI.java
第三步.再编译生成.h文件: javah -jni HelloJNI
上图为生成的.h文件。可以看出我们在JAVA类中写的native方法到了这里面来。
第四步. 编写C代码 文件命名为HelloWorld.c跟前面加载链接库相对应 .
#include "HelloJNI.h"
int result=888;
//注:JAVA的类型跟C的类型转换 可以用JNI来操作
//有点类似继承的样子
JNIEXPORT void JNICALL Java_HelloJNI_setNum
(JNIEnv * env, jclass jc, jint num){
result+=num;
}
JNIEXPORT jint JNICALL Java_HelloJNI_get
(JNIEnv * env, jclass jc){
return result;
}
第五步. 生成.o文件 再生成.so文件
gcc -c -fPIC -o HelloWorld.o HelloWorld.c //生成.o
gcc -shared -o libHelloWorld.so HelloWorld.o //生成.so 这里一定要注意用lib开头这样才可以系统才可以找到。如果不加lib 不能找到该文件
第六步. 再让动态链接库输出可用
sudo ldconfig
第七步. 把.so文件放到JAVA.library.path中
可以用新写个方法 :
System.out.println(System.getProperty(“java.library.path”));
输出库的路径。放到其中就可以
第八步 便可以运行JAVA: java HelloJNI
得到结果 1554