2013-05-07 49 views
4

我正在開發一個使用C++代碼的android應用程序。嘗試使用JNI但失敗。 在myFirstApp.cppUnsatisfiedLinkError:未找到本地方法 - Android

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

您的定義看起來正確。根據幾個類似的帖子,這可能是因爲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

+0

不幸的是,它沒有工作。 – omarsafwany 2013-05-07 01:33:07

+0

這是你的庫中完整的cpp代碼嗎?我不得不承認我不是jni的專家,但是如果是這樣的話,看起來你缺少一些加載和初始化例程。大多數工作示例是以「jint JNI_OnLoad」,get_native_data開始的,之後是extern「C」和所有方法。除非有人提供更好的建議,否則我只能推薦通過Android「獲取入門」資源和提示頁面,例如。 http://developer.android.com/training/articles/perf-jni.html#faq_ULE – 2013-05-07 01:56:45

+0

這不是所有的代碼。我附上了問題似乎發生的部分。 – omarsafwany 2013-05-07 02:07:46

相關問題