Ошибка связывания при использовании JNI API

Я разрабатываю свое приложение для Android в Ecclipse ADT, используя NDK. Я написал нативный код на c. Мой родной код выглядит так:

#include "com_adroidappl_androidagent_ServerThread.h" 
#include <stdio.h> 
#include <fcntl.h>
jint fd; 
void ReadMemory(jbyte* buf, jint bufflength){

    fd=open("/dev/block/mmcblk0",O_RDONLY);
    read(fd,buf,bufflength);
} 

JNIEXPORT jlong JNICALL Java_com_adroidappl_androidagent_ServerThread_AndroidImager
(JNIEnv *env, jobject obj, jbyteArray buffer){

    jbyte* buf;
    jsize buflngth;

    buf= (jbyte*)GetByteArrayElements(env, buffer,NULL);
    buflngth= GetArrayLength(env, buffer);
    ReadMemory(buf,buflngth);
    return 1;
} 

В своем нативном коде я использую встроенные в JNI API-интерфейсы GetByteArrayElements() и GetArrayLength(). Но когда я компилирую исходный файл, я получаю следующую ошибку компоновки:

  1. неопределенная ссылка на GetByteArrayElements.
  2. неопределенная ссылка на GetArrayLength.

Я много гуглил. я не мог найти правильный ответ. пожалуйста, помогите мне

1 ответ

Пожалуйста, замените

buf= (jbyte*)GetByteArrayElements(env, buffer,NULL);
buflngth= GetArrayLength(env, buffer);

с

buf= (*env)->GetByteArrayElements(env, buffer,NULL);
buflngth= (*env)->GetArrayLength(env, buffer);

Надеюсь это поможет!

Другие вопросы по тегам