需要先了解JNI是什么东西:
https://blog.csdn.net/dmw412724/article/details/81477546
测试环境:centos6
我只记录我自己操作的顺序方便自己以后找回翻看。
自定义一个java类
package jni;
public class MyC {
static {
System.loadLibrary("EnjoyJniNative");
}
public static void main(String[] args) {
MyC test = new MyC();
test.MyC0();
}
private native void MyC0();
}
用javac 编译生产class
javac MyC.java
去到jni目录用Javah生成头文件(jdk8是javah,jdk11移除javah 貌似变成javac -h)
javah jni.MyC
如果没有报错这里能看见jni_MyC.h 这个文件
cat jni_MyC.h
编写调用的MyJni.c
#include <pthread.h>
#include <stdio.h>
#include "jni_MyC.h"
pthread_t pid;
Java_jni_MyC_MyC0(JNIEnv *env, jobject c1) {
printf("搞定啦\n");
}
执行gcc生成库文件下面是哪个系统就生成哪个系统的文件,libXXX.so
XXX是上面java静态变量的值
gcc -fPIC -I /jdk8/include -I /jdk8/include/linux -shared -o libEnjoyJniNative.so MyJni.c
添加库文件到环境
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/learn
执行java命令测试一下