我试图通过 JNI 库调用本机方法,但我得到“java.lang.UnsatisfiedLinkError:” 现在我将描述我所做的步骤。
测试.java
package pkgmain;
public class test {
public native static int getDouble(int n);
static {
System.loadLibrary("test");
}
public static void main(String[] args) {
for (int n = 1; n <= 20; n++) {
System.out.println(n + " x 2 = " + getDouble(n));
}
}
}
在 CMD 控制台中,我提示:
javah -classpath . pkgmain.test
我得到生成的 c 头文件“pkgmain_test.h”:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class pkgmain_test */
#ifndef _Included_pkgmain_test
#define _Included_pkgmain_test
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: pkgmain_test
* Method: getDouble
* Signature: (I)I
*/
JNIEXPORT jint JNICALL Java_pkgmain_test_getDouble
(JNIEnv *, jclass, jint);
#ifdef __cplusplus
}
#endif
#endif
DLL代码:
#include "pkgmain_test.h"
JNIEXPORT jint JNICALL Java_pkgmain_test_getDouble(JNIEnv *env,
jclass clz, jint n) {
return n * 2;
}
然后我使用 Dev C++ 编译代码。到目前为止,一切都很好。然后我将编译的“test.dll”复制到我的项目中并运行它。
获得的结果:
Exception in thread "main" java.lang.UnsatisfiedLinkError: pkgmain.test.getDouble(I)I
at pkgmain.test.getDouble(Native Method)
at pkgmain.test.main(test.java:12)
我正在查看许多教程并遵循所有步骤,但最后总是会出现此错误。
我做错了什么?抱歉英语不好,提前致谢。