当我尝试将我的library.dll与Java一起使用时,出现此错误:
java.lang.UnsatisfiedLinkError: C:\Users\ledev\Desktop\library.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform
at java.base/java.lang.ClassLoader$NativeLibrary.load0(Native Method)
at java.base/java.lang.ClassLoader$NativeLibrary.load(ClassLoader.java:2424)
at java.base/java.lang.ClassLoader$NativeLibrary.loadLibrary(ClassLoader.java:2481)
at java.base/java.lang.ClassLoader.loadLibrary0(ClassLoader.java:2678)
at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2643)
at java.base/java.lang.Runtime.loadLibrary0(Runtime.java:876)
at java.base/java.lang.System.loadLibrary(System.java:1875)
at JNI.HelloJNI.<clinit>(HelloJNI.java:6)
Exception in thread "main"
这是我的代码main.c:
#include "main.h"
#include <stdio.h>
#include<stdlib.h>
DLL_EXPORT void hello_jni()
{
printf("Hello, JNI !");
}
这是我的main.h:
#ifndef __MAIN_H__
#define __MAIN_H__
#define BUILDING_DLL
#include <windows.h>
#ifdef BUILD_DLL
#define DLL_EXPORT __declspec(dllexport)
#else
#define DLL_EXPORT __declspec(dllimport)
#endif
#ifdef __c
extern "C"
{
#endif
DLL_EXPORT void hello_jni();
#ifdef __c
}
#endif
#endif // __MAIN_H__
这是我的Java代码:
package JNI;
public class HelloJNI {
static {
System.loadLibrary("library");
}
private native void hello_jni();
public static void main(String[] args) {
new HelloJNI().hello_jni(); // invoke the native method
}
}
这就是我创建dll的方式:
g++ -c -BUILD_DLL main.c
g++ -shared -o library.dll main.o -Wl,--out-implib,libexample_dll.a
我正在使用Java的intellij IDEA,而没有用于我的C代码的特定IDE。我的操作系统是Windows 10。 我真的不知道我需要修改什么才能使其工作。我读过的主题都没有对我有所帮助(例如Create a valid shared library in C)。如果您还有其他需要,请告诉我。