2011-01-06 8 views
5

Tengo problemas para compilar el siguiente programala compilación de archivos que utiliza 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; 
    } 

Desde que estoy trabajando UNIX, estoy usando el siguiente comando para compilar el archivo converter.c:

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

pero estoy consiguiendo los errores siguientes:

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â 

¿qué estoy haciendo mal ??

+1

¿Has leído los mensajes de error? Te dicen exactamente lo que falta: los nombres de los parámetros en la firma del método. –

+0

Creo que necesito descansar. No puedo creer que me haya perdido esa. – twidizle

+0

El nombre de la función es extraño. Asegúrese de que el nombre sea el nombre de función válido. – qrtt1

Respuesta

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

maby u perdió algo

8

En caso de que alguien se encuentra con este error, el problema es que el archivo de cabecera creado por javah no especifica el nombre de sus parámetros (es sólo un archivo de cabecera no es una implementación). Pero en su implementación, si solo copia/pega el archivo de encabezado sin agregar los nombres de los parámetros obtendrá el error.

Así que el código de su archivo de cabecera (el archivo generado por javah, no cambie este archivo):

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

cuando se copia (en su archivo con extensión .co .cpp), necesita tener nombres de variable:

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

Esto lo arreglará.

Cuestiones relacionadas