Java Native Interface 32 bit dll 在 64 位系统上

2022-09-01 09:56:17
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本机接口时,我遇到了一个产生此错误的问题。我相信这是因为我用MinGW编译了.dll,它编译成32位.dll而我的系统是64位,因此我的Java以64位运行。有没有办法强制我的Java以32位运行?


答案 1

您必须安装一个32位JVM,然后才能运行代码。

如果要分发应用程序,则需要同时生成 DLL 的 32 位和 64 位版本。然后使用以下技术加载正确的 DLL,而不考虑您的客户架构。将 32 或 64 (MyJniDLL32.dll & MyJniDLL64.dll) 附加到生成的输出文件中。

    String archDataModel = System.getProperty("sun.arch.data.model");
    System.loadLibrary(libraryName+archDataModel);

答案 2

只是为了说明一个显而易见的事实:要加载为32位架构构建的本机库,您必须强制JVM以32位模式启动。

java -d32 ...

您可能需要为您的平台安装较旧的JVM(例如。Os X上的Oracle的Java 7只有64位,你需要从他们的知识库中获取Apple的Java 6)。


推荐