加载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加载失败的解决方法,有疑问可以留言交流
原创作品,转载注明出处