我正在使用 NDK 在 Ecclipse ADT 中开发我的 Android 应用程序。我用c编写了 native 代码。我的 native 代码如下所示:
#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;
}
在我的 native 代码中,我使用 JNI 内置 API、GetByteArrayElements() 和 GetArrayLength()。但是当我编译源文件时,我收到以下链接错误:
- 对“GetByteArrayElements”的 undefined reference 。
- 未定义对“GetArrayLength”的引用。
我用谷歌搜索了很多。我找不到正确的答案。请帮助我
最佳答案
请更换
buf= (jbyte*)GetByteArrayElements(env, buffer,NULL);
buflngth= GetArrayLength(env, buffer);
与
buf= (*env)->GetByteArrayElements(env, buffer,NULL);
buflngth= (*env)->GetArrayLength(env, buffer);
希望这有帮助!
关于android - 使用 JNI API 时出现链接错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17565420/