如何修复64位/32位系统的java.lang.unsatifiedLinkError问题?

cuxqih21  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(502)

我有一个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

我尝试使用64位版本的java。因为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.LoadLibrary():

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

该文件具有所有必需的权限。
可以排除文件不在路径中的典型错误,因为运行64位jvm可以找到文件,但无法读取,因为它需要32位jvm。
有人有什么想法吗?谢谢!

rqqzpn5f

rqqzpn5f1#

解决办法很简单。。。
关于线程https://stackoverflow.com/a/12307577/11011623 system32文件夹是我的文件和依赖项所在的地方,它只允许64位二进制文件在其中。因此找不到32位dll。当在另一个路径上使用system.load()和dll时,系统无法在dll中找到必要的依赖项,因为dll所在的路径不是该路径的一部分。。。
解决方案是将所有必需的文件从system32移动到windows文件夹,或者将包含所有dll及其依赖项的自定义文件夹添加到路径中。感谢所有帮助解决此问题的评论。

相关问题