装载库,保证 JVM 在启动的时候就装载,故而一般是 static 的
static {// 加载全路径名System.load("/root/lib/libMyThreadNative.so");// 加载环境变量// System.loadLibrary("libMyThreadNative");}
编译成 .class 文件,该 java 文件包括 native 方法
javac xxx.java生成xxx.class文件生成 .h 头文件
javah xxxx生成xxx.h文件
编写 C 文件,C 文件中的方法需要参考 .h 文件中的方法签名
- 生成的 .h 的头文件需要放到 c/c++ 的文件中
#include <xxx.h> - 实现
JNIEXPORT void JNICALL Java_MyThread_start0(JNIEnv *env, jobject obj)
- 生成的 .h 的头文件需要放到 c/c++ 的文件中
编译一个动态链接库
gcc -fPIC -I /usr/lib/jdk/jdk1.8.0_231/include -I /usr/lib/jdk/jdk1.8.0_231/include/linux -shared -o lib动态库名.so C文件名.c -pthread- 动态库前面必须是lib开头
把动态库的目录添加到 path(如果使用的是
System.loadLibrary的方式)export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/
