奇怪的java.lang.UnsatifiedLinkError:未找到本机方法:

奇怪的java.lang.UnsatifiedLinkError:未找到本机方法:,java,android,opencv,android-ndk,Java,Android,Opencv,Android Ndk,我正在使用NDK+OpenCV开发应用程序。我有以下问题: 我将所有本机方法放在foodRecgnitivelib.java中,我想从文件中读取opencv矩阵: //in FoodRecgNativeLib.java public static void NativeLoadFile(String path, String tag, Mat result) { loadsfile(path,tag,result.nativeObj); return; } public nat

我正在使用NDK+OpenCV开发应用程序。我有以下问题:

我将所有本机方法放在foodRecgnitivelib.java中,我想从文件中读取opencv矩阵:

//in FoodRecgNativeLib.java

public static void NativeLoadFile(String path, String tag, Mat result)
{
    loadsfile(path,tag,result.nativeObj);
    return;
}
public native static void loadsfile(String path, String tag, long addr);

//.h file
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class ca_uwo_csd_Threads_FoodRecgNativeLib */

#ifndef _Included_ca_uwo_csd_Threads_FoodRecgNativeLib
#define _Included_ca_uwo_csd_Threads_FoodRecgNativeLib
#ifdef __cplusplus
extern "C" {
#endif
JNIEXPORT void JNICALL Java_ca_uwo_csd_Threads_FoodRecgNativeLib_loadsfile
(JNIEnv *, jclass, jstring, jstring, jlong);
#ifdef __cplusplus
}
#endif
#endif

//in .cpp file, .h file is included

JNIEXPORT void JNICALL Java_ca_uwo_csd_Threads_FoodRecgNativeLib_loadsfile
 (JNIEnv *env, jobject cls, jstring path, jstring tag, jlong result_addr)
{
    cv::FileStorage fs(jstring2str(env,path), FileStorage::READ);
    Mat& data = *(Mat*)result_addr;;
    fs[jstring2str(env,tag)] >> data;
}
//在foodRecgnitivelib.java中
公共静态无效NativeLoadFile(字符串路径、字符串标记、Mat结果)
{
loadsfile(路径、标记、结果.nativeObj);
返回;
}
公共本机静态void loadsfile(字符串路径、字符串标记、长地址);
//.h文件
/*不要编辑此文件-它是机器生成的*/
#包括
/*类ca_uwo_csd_Threads_FoodRecgNativeLib的头*/
#如果NDEF包括了CAU、csd、线程和食品目录
#定义(包含)(ca)(uwo)(csd)(Threads)(FoodRecgNativeLib)
#ifdef_uucplusplus
外部“C”{
#恩迪夫
JNIEXPORT void JNICALL Java_ca_uwo_csd_Threads_FoodRecnativeLib_loadsfile
(JNIEnv*,jclass,jstring,jstring,jlong);
#ifdef_uucplusplus
}
#恩迪夫
#恩迪夫
//在.cpp文件中,包括.h文件
JNIEXPORT void JNICALL Java_ca_uwo_csd_Threads_FoodRecnativeLib_loadsfile
(JNIEnv*env、jobject cls、jstring路径、jstring标记、jlong result\u addr)
{
cv::FileStorage fs(jstring2str(env,path),FileStorage::READ);
材料与数据=*(材料*)结果加上;;
fs[jstring2str(环境,标签)]>>数据;
}

有人能检查一下我的代码有什么问题吗?

您可能忘了通过加载本机库

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

您可能忘了通过加载本机库

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

Java\u ca\u uwo\u csd\u Threads\u foodRecgnitivelib\u loadsfile
的声明和实现签名不匹配。将实现中的第二个参数类型从
jobject
更改为
jclass
Java\u ca\u uwo\u csd\u Threads\u foodRecgnitivelib\u loadsfile的声明和实现签名不匹配。将实现中的第二个参数类型从
jobject
更改为
jclass

实际上,您甚至不需要该.h文件。如果不打算再次使用自动工具生成文件,可以安全地将其删除。只需将
#include
放入cpp,并用
extern“C{}
将其包围即可。谢谢。我可能需要在那个类中添加更多的本机函数。所以我最好保留那个.h文件。事实上,你甚至不需要那个.h文件。如果不打算再次使用自动工具生成文件,可以安全地将其删除。只需将
#include
放入cpp,并用
extern“C{}
将其包围即可。谢谢。我可能需要在那个类中添加更多的本机函数。所以我最好保留.h文件。