前提和要求
- 只有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 里
这个过程就是一个曲线救国的过程,称之为 “桥接”。