Fra*_*ver 28 java dll java-native-interface mingw
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)`
Run Code Online (Sandbox Code Playgroud)
在使用Java Native Interface时,我遇到了一个产生此错误的问题.我相信这是因为我使用MinGW编译了.dll,它编译成32位.dll而我的系统是64位,因此我的Java运行在64位.反正有没有迫使我的Java以32位运行?
Jav*_*a42 27
您必须安装32位JVM,您才能运行代码.
如果要分发应用程序,则需要构建DLL的32位和64位版本.然后使用以下技术加载正确的DLL,无论您的客户是否拱门.在生成的输出文件中附加32或64(MyJniDLL32.dll和MyJniDLL64.dll).
String archDataModel = System.getProperty("sun.arch.data.model");
System.loadLibrary(libraryName+archDataModel);
Run Code Online (Sandbox Code Playgroud)
小智 8
只是说明显而易见:要加载为32位架构构建的本机库,必须强制JVM以32位模式启动.
java -d32 ...
Run Code Online (Sandbox Code Playgroud)
可能您需要为您的平台安装较旧的JVM(例如,OS X上的Oracle Java 7仅为64位,您需要从其知识库中获取Apple的Java 6).