java.lang.UnsatisfiedLinkError中:未找到本机方法,同时运行时调用该本地方法的Eclipse

问题描述:

我在机器人编程新,所以我试着写只是一个简单的程序,可以从Java JNI调用本地文件夹的文件CPP方法..虽然我试图运行OPENCV的例子,并尝试以相同的方式调用,但没有任何一个解决OpenCV教程2 - 混合处理。它在我的模拟器中启动并崩溃。java.lang.UnsatisfiedLinkError中:未找到本机方法,同时运行时调用该本地方法的Eclipse

com_rukna_myfirstandroidimageapp_MainActivity.h

extern "C"{ 
* Class:  com_rukna_myfirstandroidimageapp_MainActivity 
* Method: getStringfromNative 
* Signature: (I)Ljava/lang/String; 

JNIEXPORT jstring JNICALL Java_com_rukna_myfirstandroidimageapp_MainActivity_getStringfromNative 
    (JNIEnv *, jobject, jint); 
} 

CPPCALL.cpp

#include <com_rukna_myfirstandroidimageapp_MainActivity.h>  
#include <opencv2/core/core.hpp>   
#include <opencv2/imgproc/imgproc.hpp> 
JNIEXPORT jstring JNICALL Java_com_rukna_myfirstandroidimageapp_MainActivity_getStringfromNative (JNIEnv *env , jobject obj, jint src)  
{ 
     return (env)->NewStringUTF("HELLO from JNI CPPCALL !!");  
} 

使用命令提示我还在MYPROJECT使用这个/ bin中/类路径/ javap的-s -p MainActivity
----我得到了很多---

public native java.lang.String getStringfromNative(int);  
    descriptor: (I)Ljava/lang/String; 

但是当我把这种方法从我的MainActivity像下面

package com.rukna.myfirstandroidimageapp;  
import library  
public class MainActivity extends Activity { 
/* some declarations and other functions */ 
int a = 0;int b = 1;  
String s = getStringfromNative(a); /*---> error when call for the cpp method*/ 
_field.setText(s); 
_field.setSelection(_field.getText().toString().length()); 


public native String getStringfromNative(int a); 

    static { 
     if (!OpenCVLoader.initDebug()) { 
      // Handle initialization error 
     } 
     else{ 
     System.loadLibrary("MyLib");} 
    } 
} 

我有以下错误运行时应用:

java.lang.UnsatisfiedLinkError: Native method not found: com.rukna.myfirstandroidimageapp.MainActivity.getStringfromNative:(I)Ljava/lang/String; 

Android.mk

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 

#OPENCV_CAMERA_MODULES:=off 
#OPENCV_INSTALL_MODULES:=on 
#OPENCV_LIB_TYPE:=SHARED 
#OPENCV_LIB_TYPE:=STATIC 
# OpenCV 
OPENCV_CAMERA_MODULES:=on 
OPENCV_INSTALL_MODULES:=on 
OPENCV_LIB_TYPE:=STATIC 
include D:/OpenCV-2.4.11-android-sdk/sdk/native/jni/OpenCV.mk 


#LOCAL_MODULE := CLAHE_test 
LOCAL_MODULE := MyLib 
LOCAL_SRC_FILES := CPPCALL.cpp 
#LOCAL_SRC_FILES := CLAHE_test.cpp 
#LOCAL_C_INCLUDES := $(LOCAL_PATH) 
LOCAL_LDLIBS += -llog 

include $(BUILD_SHARED_LIBRARY) 

Application.mk

APP_STL := gnustl_static 
APP_CPPFLAGS := -frtti -fexceptions 
APP_ABI := x86 
APP_PLATFORM := android-19 

当我在myproject.apk校验,那么我发现MyFirstAndroidImageApp.apk \ lib中\ X86

libhydrogen.so 
libimageutils.so 
liblept.so 
libMyLib.so 
libnative_camera_r2.3.3.so 
libnative_camera_r3.0.1.so 
libnative_camera_r4.0.3.so 
libnative_camera_r4.1.1.so 
libnative_camera_r4.2.0.so 
libnative_camera_r4.3.0.so 
libnative_camera_r4.4.0.so 
libopticalflow.so 
libtess.so 

项目属性 - >℃下在/ C++ general->路径和符号 - >包含 - > GNU C++

${NDKROOT}/platforms/android-9/arch-arm/usr/include 
${NDKROOT}/sources/cxx-stl/gnu-libstdc++/4.6/include 
${NDKROOT}/sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi-v7a/include 
${NDKROOT}/toolchains/arm-linux-androideabi-4.8/prebuilt/windows-x86_64/lib/gcc/arm-linux-androideabi/4.8/include 
D:/OpenCV-2.4.11-android-sdk/sdk/native/jni/include 
D:\android-ndk-r10d\platforms\android-19\arch-x86\usr\include 

帮助我,当我打电话同样的方法没有任何参数,那么它运行正常,我没有得到它,为什么.....难道我需要的,如果是,则在何处以及如何给一个构造函数样的事情?

+0

我已经先用垫文件作为参数相同方法的调用,然后我试图使它简单,想的只是长久以来试图, int等等。但是错误是一样的。没有参数就没有错误.. – RUKNA

您是否尝试在Application.mk中修改APP_ABI:= armeabi-v7a。此外,如果CPP编译成功,你会发现这样的文件在库/ armeabi-V7A