Can't find dependent libraries 求解决方案

Can’t find dependent libraries

网上基本结果是环境变量问题

然后又说是依赖库问题

最近在做一些java开发的时候,需要调用操作系统底层的一些东西,所以我用c++ 写了一个dll动态库文件,通过java的JNI进行调用。dll 文件生成之后 在本机用java调用没有问题, 但是换了一台主机就报错了,报错如下:

java.lang.UnsatisfiedLinkError: D:\workspace_bsp\myzauto\lib\getcpu.dll: Can’t find dependent libraries。

大概意思是找不到依赖库。

由于是第一次用java调用dll动态库,所以不知道这个问题该怎么解决。在网上查了半天都没有结果,网上也没有解决方案。只知道缺少依赖的dll 。 但是我不知道 缺少哪些动态库。于是我就从想办法找如何查找缺失依赖库的办法,终于在网上找到一个工具,可以查看你所用的 dll的依赖库,如我的(getcpu.dll)。

工具的名字为《DLL依赖查看工具》。见附件下载。

解压, 双击打开DLL依赖查看工具 ,打开你得dll文件(如:getcpu.dll);显示结果如图(见附件,由于不知道怎么插入图片)

图片中带有黄色问号的是缺失的dll文件, 你在网上下载缺失的 dll文件(例如我缺失的 MSVCRTD.dll 和 MFC42D.dll)。

下载地址: http://www.dllbang.com/。

下载成功后,加载进去,或者放在 system32目录下。 即可。然后 再用java调用getcpu.dll 就成功了。

注意事项:

1:依赖库的顺序。

    System.load(System.getProperty("user.dir")+"/lib/MSVCRTD.dll");  
    System.load(System.getProperty("user.dir")+"/lib/MFC42D.dll");  
    System.load(System.getProperty("user.dir")+"/lib/getcpu.dll");  

 这个顺序须按照你的调用依赖库的顺序排列。 如果顺序写反了,依然会报 Can't find dependent libraries的错。

 所以,如果把所需的依赖库都加载了,还报错,试着修改这几个依赖库的顺序。

2:dll文件的下载地址:

  http://www.dllbang.com/

  这个网站可以搜索,下载你所需的dll动态库。

但我的都是啊??

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
### 回答1: 这个错误是由于Java虚拟机无法加载本地库,因为它找不到相关的依赖库。这可能是由于操作系统缺少必要的库文件或者Java虚拟机版本不兼容导致的。您可以尝试更新Java虚拟机或者安装缺少的依赖库来解决这个问题。 ### 回答2: 这个错误信息提示说,在 JVM(Java虚拟机)初始化的时候,无法加载本机库,因为找不到相关的依赖库。 首先,我们需要了解一下什么是本机库和依赖库。本机库是指针对某种平台的二进制文件,通常使用 C 或 C++ 编写,这些库可以在 Java 应用程序中被使用。比如,可以通过 JNI(Java本机接口)调用本机库来实现更高效的算法。 而依赖库则是指本机或 Java 库所依赖的其它库。如果一个本机库依赖于其它库,但这些库没有被正确地安装或配置,那么就有可能出现找不到依赖库的情况。 那么,具体的解决方法是什么呢?首先,检查本机库和依赖库的路径是否正确。在 Linux 或 Unix 系统上,可以使用“ldd”命令检查本机库的依赖关系。如果存在缺失的依赖库,可以尝试通过下载或更新相应的库文件来解决问题。 另外,还可以尝试重新安装或配置相关的软件包,以确保库文件被正确地安装和配置。如果尝试了上述方法仍然无法解决问题,那么可能需要重新编译本机库或使用不同版本的依赖库。 总之,出现这种错误提示,通常是由于本机库或依赖库的问题导致的。通过检查路径和更新相关的软件包,可以解决这种问题。如果还无法解决,可以考虑重新编译本机库或使用不同版本的依赖库。 ### 回答3: 在Java程序运行过程中,有时候会遇到类似于“error occurred during initialization of vm unable to load native library: can't find dependent libraries”这样的错误提示,这个错误提示主要是由于Java虚拟机加载本地库时出现了问题。具体来说,当我们在一个Java应用程序中调用了使用了本机库的代码时,Java虚拟机会尝试加载本地库,但如果它无法找到要加载的本地库或者某些依赖库时,就会出现这样的错误提示。 那么我们该如何解决这个问题呢?首先,我们需要确认我们所调用的本机库、Java虚拟机和依赖库的版本是否匹配。如果版本不匹配,可能会导致Java虚拟机无法找到依赖库或者无法正确加载本地库。我们还可以尝试在JVM启动命令中指定本地库路径,如“-Djava.library.path=/path/to/lib”,这样可以让Java虚拟机直接找到要加载的本地库。另外,我们也可以尝试使用动态链接(dlopen)和动态符号解析(dlsym)等方法来自行加载本地库和依赖库,以避免Java虚拟机和操作系统加载本地库时出现的问题。 总之,当出现“unable to load native library: can't find dependent libraries”这样的错误提示时,我们需要先检查本机库和依赖库的版本是否匹配,并且可以尝试在启动命令中指定本地库路径来解决问题。如果问题依然存在,我们可以考虑使用动态链接和动态符号解析等方法来手动加载本地库和依赖库。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值