2011-01-06 6 views
5

나는 다음과 같은 프로그램컴파일 C 파일 jni.h

PPConverter.java를 컴파일하는 데 문제가 있어요 :

public class PPConverter { 
    private native void convert(String s); 
    public static void main(String[] args){ 
     new PPConverter().convert(args[0]); 
    } 
    static { 
     System.loadLibrary("converter"); 
    } 
} 

converter.c : 나는

#include <jni.h> 
#include <stdio.h> 
#include "PPConverter.h" 

JNIEXPORT void JNICALL Java_PPConverter_convert (JNIEnv *, jobject, jstring){ 
    printf(jstring); 
    return; 
    } 

을 일하고 있기 때문에 UNIX, converter.c 파일을 컴파일하려면 다음 명령을 사용하고 있습니다.

cc -I/usr/lib/jvm/java-6-openjdk/include converter.c -o libconverter.so 

그러나 나는 다음과 같은 오류가 점점 오전 :

converter.c: In function âJava_PPConverter_convertâ: 
converter.c:5: error: parameter name omitted 
converter.c:5: error: parameter name omitted 
converter.c:5: error: parameter name omitted 
converter.c:6: error: expected expression before âjstringâ 

내가 잘못하고있는 중이 야 무엇을?

+1

오류 메시지를 읽었습니까? 누락 된 부분을 정확하게 알려줍니다. 메소드 서명의 매개 변수 이름입니다. –

+0

나는 쉬어야한다고 생각합니다. 나는 그 것을 놓친다는 것을 믿을 수 없다. – twidizle

+0

함수 이름이 이상합니다. 이름이 유효한 함수 이름인지 확인하십시오. – qrtt1

답변

0
JNIEXPORT void JNICALL Java_PPConverter_convert (JNIEnv *jbi, jobject obj, jstring str){ 
    printf(jstring); 
    return; 
    } 

maby이 유 사람이 오류로 실행되는 경우에는 뭔가

8

을 잃은, 문제는 그것 (javah가 만든 헤더 파일이 매개 변수의 이름을 지정하지 않는 단지 헤더 파일이 아닌 것입니다 이행). 그러나 구현시 매개 변수 이름을 추가하지 않고 헤더 파일을 복사/붙여 넣기 만하면 오류가 발생합니다. 당신이 (이 .c 또는 통화 당 끝나는 파일에)을 복사 할 때

JNIEXPORT void JNICALL Java_PPConverter_convert (JNIEnv *, jobject, jstring); 

:

그래서 헤더 파일에서 코드 (javah의에 의해 생성 된 파일은이 파일을 변경하지 마십시오) 변수 이름이 필요합니다 :

JNIEXPORT void JNICALL Java_PPConverter_convert (JNIEnv *env, jobject obj, jstring mystring){ 

이 문제가 해결됩니다.