android - 使用 JNI API 时出现链接错误

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

我正在使用 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()。但是当我编译源文件时,我收到以下链接错误:

  1. 对“GetByteArrayElements”的 undefined reference 。
  2. 未定义对“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/

相关文章:

c# - 如何在 Android 中使用信号器

java - 我想使用 Java 字符串数组循环在 SQLite 中创建多个表。编程不好?

rust - 将jni::sys::JNIEnv转换为ffi中定义的JNINativeInterface

android - 完全使用 native 代码(无 JNI)从后台线程更新 UI?

android - 使用 Eclipse 3.6.1 正确安装 Android SDK、ADT

android - 错误 : WatchActivity cannot be resolved to a type, 为什么我会收到此消息?

android - 可扩展的 ListView 按年/月对项目进行分组

android - 错误 : Gradle DSL method not found: 'implementiation()' Possible causes:

java - 用于 C++ 实现的 native JNI 静态方法的 Java 运行时错误

Android - 谷歌地图