JNI找不到本机方法(test \ Test.java:11:找不到符号)

时间:2013-04-24 12:03:52

标签: java c++ java-native-interface

我关注jni的this tutorial

1)步骤使用方法

进行test \ Test.java文件
public native static int getDouble(int n);

2)编译并生成头文件。 (javac,javah)

3)创建VC Win32项目(应用程序类型:DLL)

4)将项目属性更改为包含

%JAVA_HOME%\include;%JAVA_HOME\include\win32\

5)在vc项目中复制粘贴的test_Test.h。

6)构建> Confugration Manager(将平台更改为x64)

7)构建解决方案+将生成的.dll文件复制到Test.java类路径

8)更改Test.java以包含调用本机函数调用。

package test;

public class Test {

    public native static int getDouble(int n);

    public static void main(String[] args) {
        System.loadLibrary("jni_example");

        for (int n = 1; n <= 20; n++) {
            System.out.println(n + " x 2 = " + getDoubled(n));
        }
    }
}

9)再次尝试编译测试会产生问题。

D:\workspace\jni_example>ls
jni_example.dll  test  test_Test.h

D:\workspace\jni_example>javac -classpath . test\Test.java
test\Test.java:11: cannot find symbol
symbol  : method getDoubled(int)
location: class test.Test
                        System.out.println(n + " x 2 = " + getDoubled(n));
                                                           ^
1 error

当我注释掉System.out行时,它可以正常运行而无需打印任何内容。

D:\workspace\jni_example>java -version
java version "1.6.0_30"
Java(TM) SE Runtime Environment (build 1.6.0_30-b12)
Java HotSpot(TM) 64-Bit Server VM (build 20.5-b03, mixed mode)

我在哪里错了?

2 个答案:

答案 0 :(得分:5)

这是一个拼写错误。 getDoubled()getDouble()

答案 1 :(得分:2)

您收到错误是因为您写了一个拼写错误。你在打电话

System.out.println(n + " x 2 = " + getDoubled(n));

但你宣布它就像

public native static int getDouble(int n);

请注意getDoublegetDoubled之间的区别。

将声明更改为

public native static int getDoubled(int n);

这解决了这个问题。