步骤1:
maven仓库下载JNA的jar包版本可任意选,最好是4.2以上的。
步骤2:
编辑代码进行测试
windows下可将dll文件的文件夹直接放到src下就可以开始进行测试了。
public class xxx{
public interface TestDll extends Library{
//load的第一个参数为包含函数入口的动态库文件名
TestDll INSTANCE = (TestDll)Native.load("map",TestDll.class);
//此处方法定义与动态库中的函数名一致
public float java_analyzeImage(String base64);
//.....等方法
}
public staitc void main(String args[]){
//根据自己的业务传相应的参数
float result = TestDll.INSTANCE.java_analyzeImage("xxxxxxxxxxx")
system.out.println("输出结果:"+result);
}
}
注意:编译动态库时,头文件中需要注意的就是记得带上extern "C" __declspec(dllexport)。前面的extern "C"是能够保障生成和声明的函数名字保持一致。后面部分声明为导出函数。
难点:虽然JNA提供了一些C的类型映射,但是如果不是很熟的话出了问题报错很少尤其刚开始接触还是会有点懵,这里我就不过赘述了,自己多摸索摸索。
本人最终项目是要打包发linux部署的,所以在项目新建了一个resource folder命名(linux-x86-64),JNA中的load方法会自动去该报名去找指定的so文件(如:load("map")作为入口),其他的一些依赖的so文件放入/usr/lib或者自定义的一个目录下,自定义的目录可在/etc/ld.so.conf文件中将绝对路径添加进去即可。
方式二:将所有的.so文件放到自己配置的lib目录下执行ldconfig之后程序直接调用即可。
这样就可以保证发布到服务器后可以调用到动态库。