使用JNI执行时出错

时间:2011-04-22 23:57:36

标签: java java-native-interface

我按照本教程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

有关正在发生的事情的任何线索?

谢谢!

1 个答案:

答案 0 :(得分:2)

当你为64位编译DLL时,你的JVM可能是32位的。 JVM需要编译到与JVM相同的体系结构的库,没有例外。更改编译设置以编译32位DLL,它应该可以工作。

IA-32代表英特尔架构32位,即x86,而AMD 64则代表x86-64。英特尔最终获得了AMD的许可。