Ach*_*oot 0 c++ java java-native-interface
我正在关注jni上的本教程。
1)步骤使用方法制作了一个test \ Test.java文件
public native static int getDouble(int n);
Run Code Online (Sandbox Code Playgroud)
2)编译并生成头文件。(javac,javah)
3)创建一个VC Win32项目(应用程序类型:DLL)
4)将项目属性更改为包括
%JAVA_HOME%\include;%JAVA_HOME\include\win32\
Run Code Online (Sandbox Code Playgroud)
5)复制粘贴到vc项目中的test_Test.h。
6)Build> 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));
}
}
}
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
当我注释掉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)
Run Code Online (Sandbox Code Playgroud)
我在哪里错呢?
这是一个拼写错误。 getDoubled()与getDouble()