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

JNI找不到本机方法(test\test.java:11:找不到符号),java,c++,java-native-interface,Java,C++,Java Native Interface,我正在关注jni 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\ 在vc项目中复制粘贴的test_test.h 6 Build>Confgration Manager将平台更改为x64 7生

我正在关注jni

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\
在vc项目中复制粘贴的test_test.h

6 Build>Confgration 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));
        }
    }
}
当我注释掉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)

这是怎么回事?

这是一个拼写错误。getDouble与getDouble的对比

您之所以会出现错误,是因为您输入了一个打字错误。你在打电话吗

System.out.println(n + " x 2 = " + getDoubled(n));
但你是在宣称

public native static int getDouble(int n);
注意getDouble和getDouble之间的区别

将声明更改为

public native static int getDoubled(int n);

这就解决了问题。

@ShafikYaghmour参考错误。为什么本机方法getDouble应该被称为getDouble?@ShafikYaghmour引用中也有这个错误。它成功了!谢谢你,伙计!我不得不改变在cpp文件太,我不能接受asnwer在5分钟后会这样做。再次感谢:
public native static int getDoubled(int n);