JNI错误" java.lang.UnsatisfiedLinkError:"

时间:2013-08-01 16:42:11

标签: java methods java-native-interface native

我正在尝试通过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)

我正在查看许多教程并遵循所有步骤,但最后总是会收到此错误。

我做错了什么?对不起英语不好,提前谢谢。

1 个答案:

答案 0 :(得分:1)

我得到了我的错误解决方案。在dll项目创建中出错。正确的选项是“in c”而不是默认选项“in c ++”,就像捕获一样。

enter image description here

现在它完美无缺。调试结果:

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

非常感谢:)