JNI找不到本机方法(test\test.java:11:找不到符号)
我正在关注jni 1步骤使用方法生成test\test.java文件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生
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);