我有一个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而无法读取文件。
有人有什么想法吗?谢谢!
答案 0 :(得分:0)
解决方案非常简单...
关于线程https://stackoverflow.com/a/12307577/11011623,我的文件和依赖项所在的System32文件夹只允许其中包含64位二进制文件。因此找不到32位dll。当在另一个路径上使用System.load()和dll时,系统无法在dll中找到必需的依赖项,因为dll所在的路径不属于该路径...
解决方案是将所有必需的文件从System32移到Windows文件夹,或者将包含所有dll及其依赖项的自定义文件夹添加到PATH。 感谢所有有助于解决此问题的评论。