奇怪的java.lang.UnsatifiedLinkError:未找到本机方法:
我正在使用NDK+OpenCV开发应用程序。我有以下问题: 我将所有本机方法放在foodRecgnitivelib.java中,我想从文件中读取opencv矩阵:奇怪的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
//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文件。