UnsatisfiedLinkError:找不到本机方法 - Android

时间:2013-05-07 00:36:03

标签: android opencv java-native-interface unsatisfiedlinkerror

我正在使用C ++代码开发一个Android应用程序。试图使用JNI但失败了。 myFirstApp.cpp中的代码

JNIEXPORT jint JNICALL Java_com_example_myfirstapp_CreateApp_findMarkersNative(
        JNIEnv* env, jobject, jlong addrRgba) {
    //clock_t begin = clock();
    Mat& mRgb = *(Mat*) addrRgba;
    Mat mgray(mRgb.rows, mRgb.cols, CV_8UC1);
    cvtColor(mRgb, mgray, CV_RGBA2GRAY, 1); // the working one

    clearVectors();

    findSquares(mgray);
    mergeRectangles();

    processFilteredSquares(mgray);

    drawFilteredSquaresWithoutMarker(mRgb);
    __android_log_print(ANDROID_LOG_VERBOSE, APPNAME, "Candidates %i",candidates.size());
    return clusterBoundaries.size();
//  clock_t end = clock();

//  mgray.release();
}

在android活动(CreateApp)中,我已经声明了方法

public native int findMarkersNative(long imgAdd);

活动中的包名称是

package com.example.myfirstapp;

logcat出现错误

Caused by: java.lang.UnsatisfiedLinkError: Native method not found com.example.myfirstapp.CreateApp.findMarkersNative

1 个答案:

答案 0 :(得分:1)

您的定义似乎正确无误。根据几篇类似的帖子,可能是因为C / C ++ name mangling。 尝试围绕您的方法,围绕使用

定义此API的位置
  

extern“C”{}

例如:

extern "C" {
JNIEXPORT jint JNICALL Java_com_example_myfirstapp_CreateApp_findMarkersNative(JNIEnv* env, jobject, jlong addrRgba) 
{
... function code ...
}
}

来源:Unsatisfied link error