使用JNI API时链接错误

时间:2013-07-10 08:05:53

标签: android java-native-interface eclipse-adt android-ndk-r7

我正在使用NDK在Ecclipse ADT中开发我的Android应用程序。我在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()&amp; GetArrayLength()。但是当我编译我的源文件时,我得到以下链接错误:

  1. 对'GetByteArrayElements'的未定义引用。
  2. 未定义对'GetArrayLength'的引用。
  3. 我搜索了很多。我找不到合适的答案。请帮帮我

1 个答案:

答案 0 :(得分:5)

请更换

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

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

希望这有帮助!