加载dll文件失败 java.lang.UnsatisfiedLinkError: D:\workspace\face\lib\JSeetaface6.dll: Can't find dependent libraries 的解决

          最近使用java做一个人脸识别的项目,需要调用dll动态库文件。但是在调用时,出现问题,花了好久才解决,

    报错如下:

         java.lang.UnsatisfiedLinkError: D:\workspace\face\lib\JSeetaface6.dll: Can't find dependent libraries 

     报错出现的代码在:  

    System.load(DLL_PATH + "/JSeetaFace6.dll");
分析原因:
Can't find dependent libraries  为加载依赖环境出错
解决思路
1. 查看加载的路径,看看是否存在此文件,如果不存在,将文件放到对应路径
这里我用过最直接的方法,将 dll 文件放到 jdk/bin 目录下,直接从环境加载 System.loadLibrary("JSeetaFace6"); 如果重新启动不报错,表示是加载路径错误问题
 2. 如果不是路径文件,那就是环境问题了,缺少加载dll文件所需要的Vc环境,下载相应的环境 vc_redist.x64.exe ,双击安装即可
下载地址: https://www.onlinedown.net/soft/621941.htm
根据本机系统位数,下载对应的环境安装即可

3. 一般情况下,进行完第2步之后,差不多问题都可以解决了,但是也有可能你加载的dll所依赖的库文件还是缺失,这个时候需要手动处理了
下载一个可以检测dll依赖的库文件的工具,看看缺失哪些依赖库,我这里用到的工具是 : dependency walker
官网下载地址: http://www.dependencywalker.com/
汉化版下载地址: http://www.3h3.com/soft/124863.html
我这里使用汉化版,下载完成后,打开程序,点击文件--> 打开,选择dll文件打开后,页面如下:

         

 

         图中黄色问号是加载此dll缺失的依赖,其中 SEETAFACE开头的这些我会从本地项目加载,所以可以看到我的环境还缺少 VCRUNTIME140_1.DLL这个依赖,需要我单独去下载

         百度一下,直接找到 VCRUNTIME140_1.DLL 下载,将对应位数的dll下载出来,放到系统 C:\Windows\System32 目录下,

         然后将此dll写到注册表,可将下面的代码保存为“注册.bat“,放到dll文件同级目录(只要在同一个文件夹里面有这两个文件即可),双击注册.bat,就会自动完成vcruntime140_1.dll注册(win98不支持)。

@echo 开始注册
copy vcruntime140_1.dll %windir%\system32\
regsvr32 %windir%\system32\vcruntime140_1.dll /s
@echo vcruntime140_1.dll注册成功
@pause

         这里奉上下载地址和详细的操作方法 : 

         https://www.jb51.net/dll/vcruntime140_1.dll.html

       将所有缺失的 dll 文件都补全之后,再次启动,调用dll,错误问题就解决了

 

       以上就是dll加载失败的解决方法,有疑问可以留言交流

 

       原创作品,转载注明出处

       

 

 


posted @ 2021-01-14 13:32  fy_qxl  阅读(7542)  评论(1编辑  收藏  举报