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
帮助我,当我打电话同样的方法没有任何参数,那么它运行正常,我没有得到它,为什么.....难道我需要的,如果是,则在何处以及如何给一个构造函数样的事情?
答
您是否尝试在Application.mk中修改APP_ABI:= armeabi-v7a。此外,如果CPP编译成功,你会发现这样的文件在库/ armeabi-V7A
我已经先用垫文件作为参数相同方法的调用,然后我试图使它简单,想的只是长久以来试图, int等等。但是错误是一样的。没有参数就没有错误.. – RUKNA