0

Could someone help me locate my error, I have looked at looked I can't seem to find it, I am trying to run my code but it keeps giving me the error java.lang.UnsatisfiedLinkError: Native method not found: nemo.lungu.receiptor.scanlibrary.ScanActivity.getPoints:(Landroid/graphics/Bitmap;)[F below is my activity method getPoints():

 public native float[] getPoints(Bitmap bitmap); 

the Header version of the method getPoints():

JNIEXPORT jfloatArray JNICALL Java_nemo_lungu_receiptor_scanlibrary_ScanActivity_getPoints (JNIEnv *, jobject, jobject); 

and finally the implementation of the method getPoints() in my .cpp file:

JNIEXPORT jfloatArray JNICALL Java_nemo_lungu_receiptor_scanlibrary_ScanActivity_getPoints (JNIEnv *env, jobject thiz,jobject bitmap) { __android_log_print(ANDROID_LOG_VERBOSE, APPNAME, "Scaning getPoints"); int ret; AndroidBitmapInfo info; void* pixels = 0; if ((ret = AndroidBitmap_getInfo(env, bitmap, &info)) < 0) { __android_log_print(ANDROID_LOG_VERBOSE, APPNAME,"AndroidBitmap_getInfo() failed ! error=%d", ret); return 0; } if (info.format != ANDROID_BITMAP_FORMAT_RGBA_8888 ) { __android_log_print(ANDROID_LOG_VERBOSE, APPNAME,"Bitmap format is not RGBA_8888!"); return 0; } if ((ret = AndroidBitmap_lockPixels(env, bitmap, &pixels)) < 0) { __android_log_print(ANDROID_LOG_VERBOSE, APPNAME,"AndroidBitmap_lockPixels() failed ! error=%d", ret); } // init our output image Mat mbgra(info.height, info.width, CV_8UC4, pixels); vector<Point> img_pts = getPoints(mbgra); jfloatArray jArray = env->NewFloatArray(8); if (jArray != NULL) { jfloat *ptr = env->GetFloatArrayElements(jArray, NULL); for (int i=0,j=i+4; j<8; i++,j++) { ptr[i] = img_pts[i].x; ptr[j] = img_pts[i].y; } env->ReleaseFloatArrayElements(jArray, ptr, NULL); } AndroidBitmap_unlockPixels(env, bitmap); return jArray; 

}

Am loading the library like:

 static { System.loadLibrary("myLibraryName"); } 

Which seems to load successfully as it gives me the message Added shared lib /data/app-lib/nemo.lungu.receiptor-2/myLibraryName.so 0xa4fe5e78 but again after that it gives me another message to say No JNI_OnLoad found in /data/app-lib/nemo.lungu.receiptor-2/myLibraryName.so 0xa4fe5e78, skipping init so I do not know if that is the cause or something else.

1 Answer 1

2

I needed to put extern "C" in front of my getPoints() because JNI does not understand C++ naming conversion, so my getPoints() method in my .cpp file needed to look like extern C JNIEXPORT jfloatArray JNICALL Java_nemo_lungu_receiptor_scanlibrary_ScanActivity_getPoints (JNIEnv *env, jobject thiz,jobject bitmap) {//method implementation}

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.