4

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
4

1 に答える 1

1

あなたの定義は正しいようです。いくつかの同様の投稿によると、C / C++ の名前マングリングが原因である可能性があります。このAPIが定義されている場所の周りで、メソッドを囲んでみてください

extern "C" { }

例えば:

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

出典:不満足なリンク エラー

于 2013-05-07T01:26:56.510 に答える