java通过JNA调用C++动态链接库

步骤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之后程序直接调用即可。     

这样就可以保证发布到服务器后可以调用到动态库。

 

 

 

 

 

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值