2013-07-10 60 views
2

我正在使用NDK在Ecclipse ADT中開發我的android應用程序。我已經在c中編寫了一個本地代碼。我的本機代碼是這個樣子:使用JNI API時發生鏈接錯誤

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

在我的本地代碼我使用內置的API JNI,GetByteArrayElements()& GetArrayLength()。但是,當我編譯我的源文件,我得到以下鏈接錯誤:

  1. 未定義的引用「GetByteArrayElements」。
  2. 對'GetArrayLength'的未定義引用。

我搜索了很多。由我找不到正確的答案。請幫我

回答

5

請更換

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

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

希望這有助於!

+0

是的。現在它工作正常..感謝Royston Pinto ..感謝很多 – user2269141

+0

原始語法對C++有好處,但你的代碼在C –

+0

請接受答案,如果它適合你:)你歡迎! –