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