私は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\
5) vc プロジェクトに貼り付けた test_Test.h をコピーします。
6) Build > Configration 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)
これのどこが間違っているのですか?