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 的位置

外部“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 回答