最近有个项目,需要调用别人c++ 封装的dll动态库文件,通过java的JNI进行调用实现。在运行程序加载dll时报错如下:
java.lang.UnsatisfiedLinkError: D:\workspace\myzauto\lib\getcpu.dll: Can't find dependent libraries。
大概意思是找不到依赖库。
由于是第一次用java调用dll动态库,没啥经验,所以不知道这个问题该怎么解决。在网上查了半天,刚开始以为是程序没有找到此dll,可能是程序类库加载路径不正确导致缺少依赖的dll 。然后各种修改jvm虚拟参数,尝试设置
-Djava.library.path="${workspace_loc}\JNITest;${env_var:PATH}" 。结果还是不行,然后网上说有可能是缺少依赖的其他dll。但是问题是我不知道具体缺少哪些动态库。于是我就得想办法查找缺失依赖库,终于在网上找到一个工具,可以查看你所用的 dll的依赖库,比如显示我缺失的(msvcr100d.dll)。
工具的名字为《DLL依赖查看工具》。
解压, 双击打开DLL依赖查看工具 ,会显示你缺失的dll文件(如:我缺失的msvcr100d.dll);
图片中带有黄色问号的是缺失的dll文件, 你在网上下载缺失的 dll文件(例如我缺失的 msvcr100d.dll)。
然后就是如何安装此缺失的msvcr100d.dll,
网上说只要把此dll放在
C:\Windows\SysWOW64 (Windows 7/8/2008r2)
点击开始菜单-->运行-->输入regsvr32 msvcr100d.dll 后,回车即可解决错误提示
,问题是根本执行不了注册。所以程序还是启动不了。然后继续搜索如何安装,直到找到如下方案:找到对应缺失的文件。
在
C:\Windows\system32和
C:\Windows\SysWOW64都放入相应的msvcr100d.dll
,然后 再用java调用msvcr100d.dll就成功了。本身dll依赖工具检测该dll就是加载
C:\Windows\system32的msvcr100d.dll,因为刚开始我是直接放在了
C:\Windows\SysWOW64,所以不起作用。