我在jni上关注this tutorial。JNI找不到原生方法(test Test.java:11:找不到符号)
1)步骤制备的测试\ 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管理器(变更平台到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)
我在哪里会出错?
@ShafikYaghmour“参考”是错误的。为什么本地方法'getDouble()'被称为'getDoubled()'? – 2013-04-24 12:09:29
@ShafikYaghmour该参考文献也有这个错字。 – 2013-04-24 12:13:23
它工作!谢啦!我不得不在cpp文件中更改,我不能接受5分钟后的更新。再次感谢:) – 2013-04-24 12:14:05