Java的:util_USBUIRT.dll:找不到依赖库(Java: util_USBUIRT.d

2019-09-21 11:27发布

我想用这个JAR文件( http://sourceforge.net/projects/uirt-j/在我的项目)。 在Eclipse中我用了个选择项目> Java构建路径>添加外部JAR将其导入。 我可以看到Ecplise JAR文件中的所有类。 这个JAR文件包含了两个dll文件。 为了加载的dll,我投入System32下目录,但是当执行我的代码,我得到了如下错误:

Exception in thread "main" java.lang.UnsatisfiedLinkError:
C:\Windows\System32\util_USBUIRT.dll: Can't find dependent libraries
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(Unknown Source)
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.loadLibrary0(Unknown Source)
at java.lang.System.loadLibrary(Unknown Source)
at util.USBUIRT.<clinit>(USBUIRT.java:269)
at Uirt.main(Uirt.java:6)

使用依赖沃克我可以看到,所有的DLL都在System32文件夹中。 我的代码:

import util.USBUIRT;
public class Uirt {
public static void main(String[] args) {
    String code = "0000";   
    try {
        USBUIRT.transmitIR(code, 2, 3, 2);
    } catch (Exception e) {
        e.printStackTrace();
    }
  }
}

如果JAR单独执行,也能正常工作。 谢谢。 (视窗7x64)

Answer 1:

在所提到的罐中的DLL是32位。 环境是Win7的X64。 我假设JVM是32位的,否则就不会有另一个错误,即: Can't load IA 32-bit .dll on a AMD 64-bit platform或相似。

尝试复制dll文件到C:\Windows\SysWOW64 ,而不是C:\Windows\System32 。 32倍的DLL应该进入C:\Windows\SysWOW64 。 它的工作对我来说,虽然我得到了util.USBUIRT$NotInitializedException这可能是库被加载正确的指示。

文件系统重定向文章可以提供一些线索上SysWOW64 VS System32

编辑:调整的java.library.path

你也可以去在评论中提到的解决方案,例如,复制dll文件到C:\tmp ,并与参数运行:

-Djava.library.path="C:\tmp;${env_var:PATH}"

但是,由于存在两个DLL之间的依赖关系, C:\tmp必须在PATH 。 否则仍有UnsatisfiedLinkError 。 手动加载uuirtdrv.dll应该帮助,即:

import util.USBUIRT;
public class Uirt {
    static {
        System.loadLibrary("uuirtdrv");
    }

public static void main(String[] args) {
    String code = "0000";   
    try {
        USBUIRT.transmitIR(code, 2, 3, 2);
    } catch (Exception e) {
        e.printStackTrace();
    }
  }
}


文章来源: Java: util_USBUIRT.dll: Can't find dependent libraries