Java JNI - 无法在AMD 64位平台上加载IA 32位.dll
问题描述:
我尝试使用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>
^
什么我必须做的就是它运行?
答
您需要一个x86_64
GCC
工具链来为x64编译它(如果您在windows中,可能是mingw)。你说得对,因为你的JDK是AMD64,所以SO/DLL也需要是AMD64。
在Windows中,您可以通过cygwin env或msys2安装x86_64-w64-mingw32-
toolchain,或者转至Microsoft C编译器。
我到目前为止只用Java进行编程,所以我对整个C世界都很陌生。我已经下载了cygwin的工具链,并且在C:\ cygwin64上有一个文件夹,并且在C:\ cygwin64 \ bin中有很多exe文件。我需要做什么来使用cygwin64编译我的.c文件? – Vilib
再次运行cygwin设置。一旦显示可用软件包,请选择x86_64-w64-mingw32工具链和软件包。另一个解决方案是带有更简单的东西的msys2和pacman,这是小菜一碟。 NOte cygwin本身不是编译器!但它带有'GCC'工具链。 C世界真是太棒了,只需要一些时间与东西相处,你就是完美的。 – 2017-04-16 14:23:48