的UnsatisfiedLinkError:本机方法未找到 - Android电子 [英] UnsatisfiedLinkError: Native method not found - Android

查看:228
本文介绍了的UnsatisfiedLinkError:本机方法未找到 - Android电子的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在开发使用C ++ code Android应用程序。尝试使用JNI,但失败了。
在code在myFirstApp.cpp

  JNIEXPORT jint JNICALL Java_com_example_myfirstapp_CreateApp_findMarkersNative(
        JNIEnv的* ENV,jobject,jlong​​ addrRgba){
    // clock_t表示开始=时钟();
    垫&安培; mRgb = *(*垫)addrRgba;
    垫mgray(mRgb.rows,mRgb.cols,CV_8UC1);
    cvtColor(mRgb,mgray,CV_RGBA2GRAY,1); //工作1    clearVectors();    findSquares(mgray);
    mergeRectangles();    processFilteredSquares(mgray);    drawFilteredSquaresWithoutMarker(mRgb);
    __android_log_print(ANDROID_LOG_VERBOSE,APPNAME考生%I,candidates.size());
    返回clusterBoundaries.size();
// clock_t表示结束=时钟();// mgray.release();
}

在Android活动(CreateApp),我已经声明的方法

 公共本土INT findMarkersNative(长imgAdd);

在活动包名称是

 包com.example.myfirstapp;

出现在logcat的误差

 产生的原因:java.lang.UnsatisfiedLinkError中:本机方法未找到com.example.myfirstapp.CreateApp.findMarkersNative


解决方案

您似乎定义正确的。据几个类似的帖子,这可能是因为C / C ++ 名称重整
尝试围绕你的方法,其中,围绕这个API与定义


  

为externC{}


例如:

 的externC{
JNIEXPORT jint JNICALL Java_com_example_myfirstapp_CreateApp_findMarkersNative(JNIEnv的* ENV,jobject,jlong​​ addrRgba)
{
...功能code ...
}
}

来源:<一个href=\"http://stackoverflow.com/questions/6350329/unsatisfiedlinkerror-in-android-eclipse\">Unsatisfied链接错误

I am developing an android app using C++ code. Trying to use JNI but failed. The code in 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();
}

In the android activity(CreateApp), I've declared the method

public native int findMarkersNative(long imgAdd);

The package name in the activity is

package com.example.myfirstapp;

The error appearing the logcat

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

解决方案

Your definitions seem correct. According to several similar posts, it may be because of C / C++ name mangling. Try surrounding your methods, around where this API is defined with

extern "C" { }

for example:

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

Source: Unsatisfied link error

这篇关于的UnsatisfiedLinkError:本机方法未找到 - Android电子的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆