2017-04-16 60 views
0

我尝试使用this tutorial. 创建JNI helloworld项目我完成了页面上的每一步。不幸的是后试图调用PROGRAMM与java -Djava.library.path="C:/Users/Philipp/Desktop/jni" HelloWorld我得到以下错误信息:Java JNI - 无法在AMD 64位平台上加载IA 32位.dll

Exception in thread "main" java.lang.UnsatisfiedLinkError: C:\Users\Philipp\Desktop\jni\helloworld.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 HelloWorld.<clinit>(HelloWorld.java:3) 

有这种类型的错误计算器上几个问题,遗憾的是没有任何解决方案都为我工作。

我想继续使用JDK 64位,所以我想我必须为我的64位机器编译我的C代码。我尝试使用-m64关键字:gcc -shared HelloWorld.c -I"C:/Program Files/Java/jdk1.8.0_121/include" -I"C:/Program Files/Java/jdk1.8.0_121/include/win32" -o libhelloworld.dll -m64这导致了以下错误:

HelloWorld.c:1:0: sorry, unimplemented: 64-bit mode not compiled in 
#include <jni.h> 
^ 

什么我必须做的就是它运行?

回答

1

您需要一个x86_64GCC工具链来为x64编译它(如果您在windows中,可能是mingw)。你说得对,因为你的JDK是AMD64,所以SO/DLL也需要是AMD64。

在Windows中,您可以通过cygwin env或msys2安装x86_64-w64-mingw32- toolchain,或者转至Microsoft C编译器。

+0

我到目前为止只用Java进行编程,所以我对整个C世界都很陌生。我已经下载了cygwin的工具链,并且在C:\ cygwin64上有一个文件夹,并且在C:\ cygwin64 \ bin中有很多exe文件。我需要做什么来使用cygwin64编译我的.c文件? – Vilib

+0

再次运行cygwin设置。一旦显示可用软件包,请选择x86_64-w64-mingw32工具链和软件包。另一个解决方案是带有更简单的东西的msys2和pacman,这是小菜一碟。 NOte cygwin本身不是编译器!但它带有'GCC'工具链。 C世界真是太棒了,只需要一些时间与东西相处,你就是完美的。 – 2017-04-16 14:23:48

相关问题