Java DLL依赖缺失解决思路和修复过程(Windows版本)

1、简单了解下opus

在工业语音采集和识别的领域,通常使用opus压缩原始音频,转成opus文件在进行传输。
opus文件是使用opus音频编码格式进行编码的音频文件,是一种开源、免专利费用的音频压缩格式。经过opus压缩后,可以将原始音频(pcm文件)内存大小压缩到原来的十分之一左右,压缩效率非常高,这样传输的流量得到了极大减轻,程序处理能力都得到了极大增强。

2、Windows下Java调用C++,实现opus能力

opus在java中并没有可用开源的三方包,但在C++中经常使用。
在开发阶段,通常通过JNI方式生成一个OpusJNI.dll的windows库文件。内部是通过C++实现了opus格式转码的相关的操功能。如:pcm格式文件转opus格式文件,opus格式转回pcm格式等。
当然,在C++的实现逻辑中,一般也需要引用一些的额外库文件。就像java程序通过import导如额外的包一样,C++也会引入额外头文件来简化业务逻辑处理。这就要求我们的电脑上需要有这些库文件,当然C++的集成开发工具Microsoft visual studio可以轻松的帮我们完成这项工作。
在安装Microsoft visual studio时,添加“使用C++的桌面开发”的工作负载,这样Microsoft visual studio会自动帮我们在电脑上安装并配置好C++桌面开发相关的库文件,也包含了opus相关的依赖库文件。

Microsoft visual studio添加工作负载,如下图所示:
在这里插入图片描述
如果之前已经安装配置过Microsoft visual studio,也可以直接编辑修改工作负载。

3、政策限制,问题产生

但有时候,你的公司可能会因为相关政策的原因,不在允许员工继续使用Microsoft visual studio这款软件。(⊙︿⊙)
没办法,作为一名打工仔,只能响应公司政策,够把软件给卸载了。
在这里插入图片描述
卸载后,问题就来了。之前可以本地调试的opus接口,就都不能运行了。
在这里插入图片描述
如上的错误,大概意思就是:程序在加载OpusJNI.dll(windows是找.dll文件,linux上通常是.so文件)库文件时,JVM找到了这个文件,但在加载该DLL时发现它所依赖的某些其他DLL(依赖库)缺失或无法找到。
很显然,这是因为卸载Microsoft visual studio导致相关的库文件也被删除了。

4、解决DLL依赖缺失步骤

1、分析目标OpusJNI.dll文件

首先我们找到加载的OpusJNI.dll,分析一下该文件依赖哪些DLL文件。

(1)、下载DLL依赖分析工具

地址:https://github.com/lucasg/Dependencies?tab=readme-ov-file
打开后,点击如下的位置下载工具。
在这里插入图片描述

(2)、打开DLL分析工具

解压后,点击如下的文件打开分析工具。
在这里插入图片描述
打开后如下:
在这里插入图片描述

(3)、选择DLL文件,拖入分析

将本地OpusJNI.dll文件拖进去,如下图所示,可以看到OpusJNI.dll文件依赖了3个文件。
缺少:VCRUNTIME140D.dll和ucrtbased.dll文件2个文件。
已存在:kernel32.dll文件。
在这里插入图片描述
根据上面的依赖情况,我们在C:\Windows\System32目录下查找,也的确如上一样,前两个找不到,第3个可以找到。

2、找到依赖DLL文件

重新安装:
这里我是通过再次安装Microsoft visual studio找回来的,如果公司的电脑已经不能安装,那就找一台其他的电脑再次安装。
重新安装Microsoft visual studio后,并添加了“C++桌面开发”的工作负载后,就可以在C:\Windows\System32目录下找到这3个dll文件了。
这里我是通过再次安装软件找到的依赖库,因为这样找比较全,可以防止依赖库中进一步缺少依赖。其他途径找也都可以。

备份依赖dll文件:
此时,把C:\Windows\System32下的dll文件都备份一份,再次卸载Microsoft visual studio。重启电脑后,会发现和之前一样还是会丢失前两个库文件。

缺失文件添加到环境变量中:
将备份中的VCRUNTIME140D.dll和ucrtbased.dll文件放到C:\Windows\System32下,通过分析工具,再次分析OpusJNI.dll文件,可以看到已经不在缺少依赖了。
在这里插入图片描述

再次运行我们的java程序,就运行成功了。
在这里插入图片描述
正常生成了1.opus文件。
在这里插入图片描述

向阳而生,Dare To Be!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值