2011-04-22 54 views
2

执行我跟着这个教程http://www.ibm.com/developerworks/java/tutorials/j-jni/section2.html(C实现)实现接口JNI的一个简单的例子,但在运行Java文件时,我得到这个错误:错误使用JNI

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 

这是怎么回事任何线索上?

谢谢!

回答

2

当您编译用于64位的DLL时,您的JVM可能是32位。 JVM需要将库编译为与JVM相同的体系结构,无一例外。改变你的编译设置来编译一个32位的DLL,它应该工作。

IA-32代表Intel架构32位,这是x86,而AMD 64涉及x86-64。英特尔最终取得了AMD的许可。

+0

感谢您的快速回复!然而,我无法找到cl的任何选项来强制执行一个32位的dll汇编......你能告诉我如何改变这些设置吗?谢谢 – 2011-04-23 01:08:02

+0

在Visual Studio中?我认为你需要使用cl.exe的32位版本,它应该存储在另一个目录中。有一个批处理文件应该为您执行此操作:http://msdn.microsoft.com/en-us/library/x4d2c09s.aspx – 2011-04-23 01:48:47