2011-01-06 10 views
5

Mam problemy kompilowanie następujący programkompilacji pliku c, która wykorzystuje 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; 
    } 

Ponieważ pracuję nad W systemie UNIX do kompilowania pliku converter.c używam następującego polecenia:

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

ale otrzymuję następujące błędy:

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â 

Co robię źle ??

+1

Czy przeczytałeś komunikaty o błędach? Mówią dokładnie, czego brakuje: nazwy parametrów w sygnaturze metody. –

+0

Myślę, że muszę odpocząć. Nie mogę uwierzyć, że tęskniłem za tym. – twidizle

+0

Nazwa funkcji jest dziwna. Upewnij się, że nazwa jest prawidłową nazwą funkcji. – qrtt1

Odpowiedz

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

maby u stracił coś

8

w przypadku ktoś prowadzi do tego błędu, problemem jest to, że plik nagłówka stworzony przez javah nie określa nazwę jego parametry (nie jest to po prostu nie jest to plik nagłówka realizacja). Ale w twojej implementacji, jeśli po prostu skopiujesz/wkleisz plik nagłówka bez dodawania nazw parametrów, otrzymasz błąd.

Więc kod z pliku nagłówka (plik generowany przez javah, nie zmieniaj tego pliku):

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

Po skopiowaniu go (do pliku kończącego się w .c lub .cpp), musi mieć nazwy zmiennych:

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

Naprawi to.

Powiązane problemy