Java JNI - 无法在AMD 64位平台上加载IA 32位.dll

时间:2017-04-16 13:07:54

标签: java c dll java-native-interface

我尝试使用this tutorial.创建一个JNI helloworld项目 我完成了页面上的每一步。不幸的是,在尝试使用java -Djava.library.path="C:/Users/Philipp/Desktop/jni" HelloWorld调用该程序后,我收到以下错误消息:

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)

有关此类错误的stackoverflow存在一些问题,遗憾的是,没有一个解决方案适用于我。

我想留在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 个答案:

答案 0 :(得分:1)

你需要一个#version 330 core layout (location = 0) in vec3 position; uniform mat4 matrices; void main() { gl_Position = matrices * vec4(position, 1.0f); } x86_64工具链来为x64编译它(如果你在windows中,可能是mingw)。你是对的,因为你的JDK是AMD64,所以SO / DLL也需要是AMD64。

在Windows中,您可以通过cygwin env或msys2安装GCC工具链,也可以使用Microsoft C编译器。