【问题标题】:Android NDK: No implementation found for native xxxxxxAndroid NDK:未找到本机 xxxxxx 的实现
【发布时间】:2013-02-20 11:00:57
【问题描述】:

我在使用Tess-two做一个项目,我想用pixConvertRGBToLuminance的方法,但总是报错:

No implementation found for native Lcom/googlecode/leptonica/android/Pix;.nativePixConvertRGBToLuminance:(I)I. 

我的Java代码是:

public static Pix pixConvertRGBToLuminance(Pix pixs){
    if (pixs == null)
        throw new IllegalArgumentException("Source pix must be non-null");

    int nativePixd = nativePixConvertRGBToLuminance(pixs.getNativePix());

    return new Pix(nativePixd);

}

我的代码.cpp是:

jint Java_com_googlecode_letonica_android_Pix_nativePixConvertRGBToLuminance(JNIEnv *env,
    jclass clazz, jint nativePixs){

PIX *pixs = (PIX *)nativePixs;

LOGE("------------------>Failed to find native pixConvertRGBToLuminance File");
PIX *pixd = pixConvertRGBToLuminance(pixs);
return (jint) pixd;
}

Leptonica 的原始代码是:

PIX * pixConvertRGBToLuminance(PIX *pixs)
{
  return pixConvertRGBToGray(pixs, 0.0, 0.0, 0.0);
}`

那为什么我总是有错?谢谢。

【问题讨论】:

  • 你的 Pix 类在 com.googlecode.letonica.android 包中吗?

标签: android android-ndk


【解决方案1】:

另一个答案是 C++ 名称修改的问题 - 将您的函数声明为 èxtern "C"

【讨论】:

  • 它不起作用,我使用项目 tess-two 作为库。对于其他有效的方法,也没有 extern "C"。我试图编译方法'rankFilter',它运行良好,但这个类从来没有工作过,甚至其他方法。我真的不知道为什么。会不会是mk文件出错了?
【解决方案2】:
extern "C" jint Java_com_googlecode_letonica_android_Pix_nativePixConvertRGBToLuminance(JNIEnv *env,
    jclass clazz, jint nativePixs){

PIX *pixs = (PIX *)nativePixs;

LOGE("------------------>Failed to find native pixConvertRGBToLuminance File");
PIX *pixd = pixConvertRGBToLuminance(pixs);
return (jint) pixd;
}

参考Calling a Java function from C++ on Android over JNI

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-01
    • 2013-04-08
    • 1970-01-01
    • 2013-08-03
    相关资源
    最近更新 更多