2013-07-10 2 views
2

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

#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'.

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

ответ

5

Просьбы заменить

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

с

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

Надеется, что это помогает!

+0

Да. Теперь он отлично работает. Спасибо. Ройстон Пинто. Большое спасибо – user2269141

+0

. Оригинальный синтаксис был хорош для C++, но ваш код находится в C –

+0

Не забудьте принять ответ, если он сработает для вас :) приветствую! –

Смежные вопросы