Linking error while using JNI APIs

719 views Asked by At

I am developing my android application in Ecclipse ADT using NDK. I have written a native code in c. My native code is look like this :

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

In my native code i am using JNI built in APIs, GetByteArrayElements() & GetArrayLength(). But when i am compiling my source file i am getting following linking error:

  1. undefined reference to 'GetByteArrayElements'.
  2. undefined reference to 'GetArrayLength'.

I have googled a lot. by i couldn't find proper answer. Please help me

1

There are 1 answers

1
Royston Pinto On

Kindly replace

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

with

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

Hope this helps!