一、调用方式:
JAVA调用C/C++动态库有很多方法,常用的有JNI(Java Native Interface)、JNA(Java Native Access)。
- JNI:早在JAVA1.1版本就开始支持,它定义了一种公用的语法,当java和c/c++双方都遵循该语法时,可以互相调用。所以使用JNI不能直接调用一般的C/C++库,而必须借助于一个中间动态库,该中间动态库实现了JAVA-JNI语法-C/C++的转换(或者你所调用的动态库原生就封装了JNI)。如果对C++稍微懂一点,其实使用起来也不难。
作者:宋清日
链接:https://zhuanlan.zhihu.com/p/465601205
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
java通过JNI(Java Native Interface)与其他语言编写的代码进行交互。
JNI工作示意图(网上下载的)
Java要调用第三方动态库,通俗点说就是需要将这个第三方动态库按照Java语言的要求再封装一次,变成Java可以调用的新动态库,这个新动态库去调用原始的动态库。
- 编写带有native声明的方法的Java类,该方法要与真正调用的动态库的方法和参数和返回值均一致。(直接用IDEA新建Java项目)
package com.JniDemo; public class JniDemo { static { System.load("/root/Jni_Lib/libJniDemo.so"); } public native int add(int a, int b); public native String print(String msg); public static void main(String[] args) { JniDemo demo = new JniDemo(); demo.print("11"); } }
2. 编译Java类生成.class文件。(build一下创建的project)
3. 使用javah生成JNI头文件。
每次头文件有改动的话,直接用工具重新生成,比较方便。