如何使用64位/ 32位系统修复java.lang.UnsatisfiedLinkError问题?

时间:2019-02-04 09:50:12

标签: java dll

我有一个64位系统,想要运行一个Java应用程序,该程序需要加载32位dll文件。我想使用 System.load() 加载库。使用64位Java-8-JRE时,会发生以下错误:

java.lang.UnsatisfiedLinkError: C:\[...]\test.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform. 

在32位Java-6-JRE上运行应用程序时会说

java.lang.UnsatisfiedLinkError: C:\[...]\test.dll: Can't find dependent libraries

我试图使用Java的64位版本。因为该dll是32位dll,所以我尝试在64位版本上运行该应用程序。但是随后又发生了另一个错误。

我还尝试使用 System.loadLibrary() 。但是错误似乎相似。

Java-8-64位:

java.lang.UnsatisfiedLinkError: C:\Windows\System32\test.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform

->由于这个错误,我可以确定java能够找到该文件。

Java-6-32位:

java.lang.UnsatisfiedLinkError: no test in java.library.path

->由于文件必须存在之前显示的错误。

我的应用程序代码很短:

使用 System.load()

public static void main(String[] args) {
    System.load("C:\\[...]\\test.dll");
}

使用 System.loadLibary()

public static void main(String[] args) {
    System.loadLibrary("test");
}

文件具有所有必要的权限。

可以排除文件不在PATH中的典型错误,因为运行64位JVM可以找到文件,但由于需要32位JVM而无法读取文件。

有人有什么想法吗?谢谢!

1 个答案:

答案 0 :(得分:0)

解决方案非常简单...

关于线程https://stackoverflow.com/a/12307577/11011623,我的文件和依赖项所在的System32文件夹只允许其中包含64位二进制文​​件。因此找不到32位dll。当在另一个路径上使用System.load()和dll时,系统无法在dll中找到必需的依赖项,因为dll所在的路径不属于该路径...

解决方案是将所有必需的文件从System32移到Windows文件夹,或者将包含所有dll及其依赖项的自定义文件夹添加到PATH。 感谢所有有助于解决此问题的评论。