Java 程序调用dll 、so中的经历

这段时间主要的工作就是各种so包,各种dll库,各种a库,当然了项目需要只能硬着头皮上了,一步步调试过来才知道原来有这么多的坑。。。。 下面就和大家一起看看吧

相信大家弄都百度了一下Java如何加载dll库了,网上说了一大堆,本人也是找了一堆的,基本就分为2类

1,过去的jni

2,就是jni的升级版------jna

我个人认为各自有优缺点吧,当然jna的使用更为简单,所以我的项目中使用的就是jna 

其实整个调用过程基本和https://blog.csdn.net/jimmy609/article/details/19076557 片文章写的差不多,但是实际操作中你会发现有些并不是那样的

1,文章中说“dll或者.so文件的名字,但不带后缀名。这符合JNI的规范,因为带了后缀名就不可以跨操作系统平台了”

实际操作发现linux平台下.so包就需要带上后缀名

2,路径问题,这是一个比较头疼的问题,网上很多人说了一堆的方法,我基本上试了一遍发现,都是比较繁琐,一点不符合开发部署最理想的那种

结合https://blog.csdn.net/wngpenghao/article/details/87861830https://blog.csdn.net/jimmy609/article/details/19076557这两篇文章 我们可以知道我的dll改如何去放置,当然dll或者.so包的生成的位数 是64位还是32位的我们就需要考虑了目前主要的就是这4目录下放置我们的dll和.so包,当然代码也要做相应的改变前者为windows平台下的dll,后者这是Linux下的,为什么要做这个两个平台的?没办法,我做的是是服务器端的开发,然而研究好dll,却发现我们没有windows服务器,只好继续so包的开发了,其实so的开发也不是很复杂,大同小异。只是我们在生成so包的时候有所不一样,以及so包的版本要注意。

3,dll 找不到指定模块错误    如果按照上面弄完发现还是不行,网上这方面的文章也是一堆,什么路径问题等等,其实归结也能说是路径问题,而我自己却认为是我们的dll包引用了其他的dll系统库,然后运行的时候却加载不到,既然是系统库为啥加载不到呢? 因为生成dll库的 多是vs2015 或者vs2017 ,vs2019(此版本只能在win10上运行)安装这些工具会下载一些系统本身没有的类库,因此我们在加载dll的服务器或者电脑就有可能会出现找不到指定模块,我们如何确定缺少哪些dll关联的库呢,https://blog.csdn.net/z215367701/article/details/77740236这个文章也可以知道如找到关联的dll,但是系统库中相同的类库很多不能精准的知道调用的是哪个类库,360就个我们提供了很好的工具https://blog.csdn.net/littletigerat/article/details/8196704这个文章就清楚的给我们列出如何去做了,同样我们可以定位到具体某个dll 的位置

4,其他dll类库的放的位置  我用的是IntelliJ IDEA 开发的 spring boot 打包成可运行jar的,我起初是把所有依赖dll都放在win32-x86-64文件夹下,奇怪的是在idea上运行可以正常的,当时打成jar运行还是会出现找不到指定模块,当时整个人都蒙了,我把jar给同事又可以直接运行,目前还没整明白,springboot 中的tomcat 路径是如何配置的 ,但问题还是得解决,后来发现jar包在dll库同一目录就可以运行,唉,总算找到解决方法了 ,虽然具体不清楚怎么回事 ,感觉多半还是路径问题,至于网上其他的方法什么把包放到system32目录下或者配置路径  ,或许可以吧 但是太不方便了  ,部署太繁琐了。

5,jdk问题  这个就是需要保持jdk版本和文件夹名字对应,dll包版本和文件夹对 ,这样基本不会出错了

6,还有一个问题是如果新建了win32-x86-64 文件夹就必须建立 win32-x86文件夹 文件夹可以为空,但是不可以没有,不然貌似会报错

好了,大致就这些了其他小细节就不一一说了,大家可以网上找找,第一次mark一下,有什么不对的,欢迎大家指正

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值