E:\Code\Java\JNITest>java test
Exception in thread "main" java.lang.UnsatisfiedLinkError: E:\Code\Java\JNITest\test.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform
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 test.main(test.java:16)`
在使用 Java 原生接口(interface)时,我遇到了一个导致此错误的问题。我相信这是因为我用 MinGW 编译了 .dll,它编译为 32 位 .dll,而我的系统是 64 位的,因此我的 Java 运行在 64 位。 有没有办法强制我的 Java 以 32 位运行?
最佳答案
您必须安装 32 位 JVM,然后才能运行您的代码。
如果您要分发您的应用程序,您将需要构建 32 位和 64 位版本的 DLL。然后使用以下技术来加载正确的 DLL,而不管您的客户拱形如何。将 32 或 64(MyJniDLL32.dll 和 MyJniDLL64.dll)附加到生成的输出文件中。
String archDataModel = System.getProperty("sun.arch.data.model");
System.loadLibrary(libraryName+archDataModel);
关于64 位系统上的 Java native 接口(interface) 32 位 dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9757456/