2013-04-24 3 views
0

나는 jni에서 this tutorial을 따르고 있습니다.JNI가 native 메소드를 찾을 수 없습니다. (test Test.java : 11 : 심볼을 찾을 수 없습니다.)

1) 단계에있어서

public native static int getDouble(int n); 

2)의 집계로 테스트 \ Test.java의 파일을 만들고 헤더 파일을 생성. VC 프로젝트에 test_Test.h을 붙여 복사)

%JAVA_HOME%\include;%JAVA_HOME\include\win32\ 

(5)을 포함하는 DLL)

4) 변경된 프로젝트 속성 : (javac의, javah의)

3)는 VC Win32 프로젝트 (응용 프로그램 유형을 만든 .

6) 구축> Confugration 관리자 솔루션 + 복사가 전화를 포함 Test.java 클래스 경로

8) 변경 Test.java에 .dll 파일을 결과 빌드 64에 (변경 플랫폼)

7) 네이티브 funciton 호출.

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) 

어디서 이런 문제가 있습니까?

답변

4

이것은 맞춤법 오류입니다. getDoubled()

+3

@ShafikYaghmour "참조"가 잘못되었습니다. 네이티브 메소드'getDouble()'을'getDoubled()'로서 호출해야하는 이유는 무엇입니까? –

+1

@ShafikYaghmour 참고 문헌에도이 오타가 있습니다. –

+0

그것은 일했다! 고마워! 나는 cpp 파일에서 변경해야했다, 나는 5 분 안에 asnwer를 받아 들일 수 없다. 나중에 할 것이다. 다시 고마워요 :) –

2

오타를 작성했기 때문에 오류가 발생했습니다. 당신은

System.out.println(n + " x 2 = " + getDoubled(n)); 

를 호출하지만

public native static int getDouble(int n); 

공지 사항처럼 getDoublegetDoubled의 차이를 선언한다.

이 문제가 해결

public native static int getDoubled(int n); 

에 선언을 변경

.

+0

예,이 문제를 해결, 감사합니다. –

+0

도와 드리겠습니다. –

관련 문제