我按照本教程http://www.ibm.com/developerworks/java/tutorials/j-jni/section2.html(C实现)实现了一个简单的JNI接口示例,但是在运行java文件时出现了这个错误:
Exception in thread "main" java.lang.UnsatisfiedLinkError: C:\JNI_examples\example2\Sample1.dll: Can't load AMD 64-bit .dll on a IA 32-bit platform
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1803)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1728)
at java.lang.Runtime.loadLibrary0(Runtime.java:823)
at java.lang.System.loadLibrary(System.java:1028)
at Sample1.main(Sample1.java:10)
我不知道为什么它认为它是AMD 64位...
我也尝试使用库的路径运行: java -Djava.library.path =。样本1
但这似乎没有任何帮助...
由于路径不同,我的cl运行方式略有不同,这就是我的运行方式:
cl -I"C:\Program Files (x86)\Java\jdk1.6.0_24\include" -I"C:\Program Files (x86)\Java\jdk1.6.0_24\include\win32" -LD Sample1.c -FeSample1.dll
有关正在发生的事情的任何线索?
谢谢!
答案 0 :(得分:2)
当你为64位编译DLL时,你的JVM可能是32位的。 JVM需要编译到与JVM相同的体系结构的库,没有例外。更改编译设置以编译32位DLL,它应该可以工作。
IA-32代表英特尔架构32位,即x86,而AMD 64则代表x86-64。英特尔最终获得了AMD的许可。