【问题标题】:Weird java.lang.UnsatisfiedLinkError: Native method not found:奇怪的 java.lang.UnsatisfiedLinkError:找不到本机方法:
【发布时间】:2014-08-20 20:08:01
【问题描述】:

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

我把所有的本地方法放在 FoodRecgNativeLib.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;
}

谁能检查我的代码有什么问题?

【问题讨论】:

    标签: java android opencv android-ndk


    【解决方案1】:

    Java_ca_uwo_csd_Threads_FoodRecgNativeLib_loadsfile 的声明和实现签名不匹配。将实现中的第二个参数类型从jobject更改为jclass

    【讨论】:

    • 事实上,你甚至不需要那个 .h 文件。如果您不打算再次使用自动工具生成文件,您可以安全地删除它。只需将#include &lt;jni.h&gt; 放入cpp 并用extern "C" {} 将其包围。
    • 谢谢。我可能必须在该类中添加更多本机功能。所以我最好保留那个 .h 文件。
    【解决方案2】:

    您可能忘记通过

    加载您的本机库
    static { System.loadLibrary("YourLibaryName"); }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-25
      • 2014-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多