1. 装载库,保证 JVM 在启动的时候就装载,故而一般是 static 的

      1. static {
      2. // 加载全路径名
      3. System.load("/root/lib/libMyThreadNative.so");
      4. // 加载环境变量
      5. // System.loadLibrary("libMyThreadNative");
      6. }
    2. 编译成 .class 文件,该 java 文件包括 native 方法

      javac xxx.java 生成 xxx.class 文件

    3. 生成 .h 头文件

      • javah xxxx 生成 xxx.h 文件
    4. 编写 C 文件,C 文件中的方法需要参考 .h 文件中的方法签名

      • 生成的 .h 的头文件需要放到 c/c++ 的文件中 #include <xxx.h>
      • 实现 JNIEXPORT void JNICALL Java_MyThread_start0(JNIEnv *env, jobject obj)
    5. 编译一个动态链接库

      • 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开头
    6. 把动态库的目录添加到 path(如果使用的是 System.loadLibrary 的方式)

      • export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/