联系
Knight's Tale » 技术

Java JNI调用 c程序的 .so 文件

2019-08-15 00:46

前提和要求

  • 只有C编译出来的 .so文件[10] 以及相应的 .h文件[11]
  • 需要使用java程序来调用.so文件

关键点

  • 第一步,撰写 java程序[1],里面引用 自己定义的C函数[2]。
  • 第二步,将 java程序[1] 编译成 .class 文件[3]
  • 第三步,使用 javah 命令 对 .class文件[3] ,生成 .h文件[4]
  • 第四步,在第一步中定义的C函数[2]以及第三步定义的.h文件[4],撰写一个 C程序[5]. 在这个程序中 通过.h文件[11] 去调用 .so文件[10]中提供的目标函数。
  • 第五步,gcc编译 C程序[5], 生成 .o文件[6]【譬如,gcc -c .c .h -L. -lm9 -fPIC -D_REENTRANT -I ......】
  • 第六步,gcc编译 .o文件[6] 以及 .so文件[10], 生成 新的动态库 .so[7].【譬如,gcc -shared -o libmym9.so .c .h -L. -lm9 -fPIC -D_REENTRANT -I .....】
  • 第七步,在 java程序[1] 中载入 .so文件[7]
  • 第八步,将 本次所有 .so文件的路径,放到 LD_LIBRAY_PATH 里

这个过程就是一个曲线救国的过程,称之为 “桥接”。