2011-01-06 4 views
5

Ich habe Probleme beim Kompilieren das folgende ProgrammKompilieren c-Datei, die jni.h verwendet

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; 
    } 

Da arbeite ich an UNIX, ich verwende den folgenden Befehl, um die Datei converter.c zu kompilieren:

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

aber ich erhalte die folgenden Fehler:

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â 

Was mache ich falsch ??

+1

Haben Sie die Fehlermeldungen gelesen? Sie sagen Ihnen genau, was fehlt: die Namen der Parameter in der Methodensignatur. –

+0

Ich denke, ich muss mich ausruhen. Ich kann nicht glauben, dass ich das verpasst habe. – twidizle

+0

Der Funktionsname ist seltsam. Stellen Sie sicher, dass der Name der gültige Funktionsname ist. – qrtt1

Antwort

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

maby u etwas

verloren
8

Falls jemand in diesen Fehler läuft, ist das Problem, dass die von javah erstellt Header-Datei nicht den Namen seiner Parameter spezifiziert (es ist nur eine Header-Datei nicht Implementierung). Aber in Ihrer Implementierung, wenn Sie nur die Header-Datei kopieren und einfügen, ohne die Parameternamen hinzuzufügen, erhalten Sie den Fehler.

So ist der Code von der Header-Datei (die Datei von javah erzeugt, ändern Sie diese Datei nicht wichtig):

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

Wenn Sie es kopieren (in Ihre Datei in .c oder CPP-Endung), muss Variablennamen haben:

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

Dies wird es beheben.

Verwandte Themen