当前位置: 首页 > news >正文

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!!!

相关文章:

  • django paramiko 跳转登录
  • C++ 使用 ffmpeg 解码本地视频并获取每帧的YUV数据
  • 如何用AI高效运营1000+Tiktok矩阵账号
  • Python 训练营打卡 Day 43
  • 玄机-日志分析-IIS日志分析
  • JavaWeb:前端工程化-ElementPlus
  • Hot100 Day02(移动0,乘最多水的容器、三数之和、接雨水)
  • 区块链+AI融合实战:智能合约如何结合机器学习优化DeFi风控?
  • 2025年五一数学建模竞赛A题-支路车流量推测问题详细建模与源代码编写(一)
  • 守护生命律动:进行性核上性麻痹的专业健康护理指南
  • Python爬虫:trafilatura 的详细使用(快速提取正文和评论以及结构,转换为 TXT、CSV 和 XML)
  • SD卡通过读取bin文件替代读取图片格式文件来提高LCD显示速度
  • 34.2STM32下的can总线外设_csdn
  • GQA(Grouped Query Attention):分组注意力机制的原理与实践《三》
  • Linux 环境下 PPP 拨号的嵌入式开发实现
  • 网络可靠性的定义与核心要素
  • 用户 xxx is not in the sudoers file.
  • FEMFAT许可分析中的关键指标
  • CentOS在vmware局域网内搭建DHCP服务器【踩坑记录】
  • html2canvas v1.0.0-alpha.12版本文本重叠问题修复
  • 上海做网站比较有名的公司有哪些/免费发广告的平台
  • 商务网站推广技巧包括什么/怎么在网上做网络营销
  • 怎么在广西建设厅网站注销c证/百度seo优
  • 域名绑定网站/网店如何做推广
  • 动漫网站开发毕业设计/2022年今天新闻联播
  • 网站建设费/关键词排名推广