2014-02-21 2 views
0

Я пытаюсь создать демонстрационное приложение, используя jni (я новичок в нем). У меня есть Googled и SO о проблеме, но ничего не помогло.java.lang.UnsatisfieldlinkError: родной метод не найден

Ниже приведен код, я использую:

include $(CLEAR_VARS) 

LOCAL_MODULE := example 
LOCAL_SRC_FILES := com_example_example_Operacoes.c 

include $(BUILD_SHARED_LIBRARY) 

Operacoes.java пакет com.example.example;

public class Operacoes { 

static { 
    System.loadLibrary("example"); 
} 

//Versao nativa do metodo soma 
public static native int soma(int a, int b); 

//Versao nativa do metodo subtracao 
public static native int sub(int a, int b); 

    } 

com_example_example_Operacoes.h

# include "com_example_example_Operacoes.c" 

    JNIEXPORT jint JNICALL Java_com_example_example_Operacoes_soma (JNIEnv *, jclass,   jint, jint); 

    int soma(int a, int b){ 
return a + b; 
    } 


    JNIEXPORT jint JNICALL Java_com_example_example_Operacoes_sub (JNIEnv *, jclass, jint, jint); 
    int sub(int a, int b){ 
return a - b; 
    } 

com_example_example_Operacoes.h

/* DO NOT EDIT THIS FILE - it is machine generated */ 
    #include <jni.h> 
    /* Header for class com_example_example_Operacoes */ 

    #ifndef _Included_com_example_example_Operacoes 
    #define _Included_com_example_example_Operacoes 
    #ifdef __cplusplus 
    extern "C" { 
    #endif 
    /* 
    * Class:  com_example_example_Operacoes 
    * Method: soma 
    * Signature: (II)I 
    */ 
    JNIEXPORT jint JNICALL Java_com_example_example_Operacoes_soma (JNIEnv *, jclass, jint, jint); 

    /* 
    * Class:  com_example_example_Operacoes 
    * Method: sub 
    * Signature: (II)I 
    */ 
    JNIEXPORT jint JNICALL Java_com_example_example_Operacoes_sub (JNIEnv *, jclass, jint, jint); 

    #ifdef __cplusplus 
    } 
    #endif 
    #endif 
+0

Проверьте, успешно ли вы создали файл .SO в каталоге lib. Без файла .so он не будет работать должным образом – bladeX

ответ

1

Вы не выполняют свои функции. Обратите внимание на первую строку (см. Ниже), у вас есть полутолк в конце строки. Затем создайте вторую функцию с другим форматом int soma(int,int)

...Java_com_example_example_Operacoes_soma (JNIEnv *, jclass, jint, jint);<<<wrong 

Вам необходимо реализовать собственные функции, используя тот же формат, как заявлено.

JNIEXPORT jint JNICALL Java_com_example_example_Operacoes_soma (JNIEnv * env, jclass clazz, jint a, jint b) 
{ 
    return a + b; 
} 
Смежные вопросы