我正在尝试通过JNI库调用本机方法,但我得到“java.lang.UnsatisfiedLinkError:” 现在我将描述我所做的步骤。
test.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)
我正在查看许多教程并遵循所有步骤,但最后总是会收到此错误。
我做错了什么?对不起英语不好,提前谢谢。
答案 0 :(得分:1)
我得到了我的错误解决方案。在dll项目创建中出错。正确的选项是“in c”而不是默认选项“in c ++”,就像捕获一样。
现在它完美无缺。调试结果:
1 x 2 = 2
2 x 2 = 4
3 x 2 = 6
4 x 2 = 8
5 x 2 = 10
6 x 2 = 12
7 x 2 = 14
8 x 2 = 16
9 x 2 = 18
10 x 2 = 20
11 x 2 = 22
12 x 2 = 24
13 x 2 = 26
14 x 2 = 28
15 x 2 = 30
16 x 2 = 32
17 x 2 = 34
18 x 2 = 36
19 x 2 = 38
20 x 2 = 40
非常感谢:)