java.lang.UnsatisfiedLinkError:找不到本机方法

时间:2016-11-29 02:50:39

标签: java android c++ opencv unsatisfiedlinkerror

我试图通过本机方法使用cvtcolor代码,但是我发现找不到本机方法错误。

这是我的cpp +代码:

Weekly_Lecture CK(C_name, S_number, TS_name, WD_name)

主要活动;

Weekly_Lecture CK(CR_name, TS_name, WD_name)

我的错误是:

v1 <- unique(sub("_.*", "", names(df1)[-1]))
df1[paste0(v1, "dose_unit")] <- lapply(v1, function(x)
                         do.call(paste0, df1[grep(x, names(df1))]))
df1
#  id var1_dose var1_unit var2_dose var2_unit var3_dose var3_unit var1dose_unit var2dose_unit var3dose_unit
#1  1         2        mL         5        mL         1        mL           2mL           5mL           1mL
#2  2         4        mg         2        mg         4        mg           4mg           2mg           4mg
#3  3         6       mcg         4       mcg         2       mcg          6mcg          4mcg          2mcg
#4  1         1        mL         1        mL         3        mL           1mL           1mL           3mL
#5  2         3        mL         3        mL         5        mL           3mL           3mL           5mL

我试图调用本机方法,但每次都会出现此错误。请有人帮助我。

2 个答案:

答案 0 :(得分:0)

在创建JNI时,您必须首先了解基本内容,第一个问题是,您的java包将如何引用所需的本机方法,为此,我们使用由下划线_连接的整个包名称和最后附加的方法名称。这是JNI方法与指定的java调用

链接的第一个条件

在您的情况下,包名称为com.example.alper.counting,类名为CoutingClass,本机方法名称为convertGray。所以JNI包装器必须是:

JNIEXPORT jlong JNICALL Java_com_example_alper_counting_CoutingClass_convertGray

您必须遵循JNI标准才能创建本机API。 Docs

答案 1 :(得分:0)

ZdaR解释得很清楚,我建议您使用javah生成带有Android Studio的头文件。 2.2有一个很好的NDK support,它可以为你生成这些文件。

我认为问题在于.cpp中你的函数返回long并且在java中你声明了本机函数返回int。

改变这个:

public class CoutingClass {
    public native static int convertGray (long mAddrRgba ,long mAddrGray);
}

到此:

public class CoutingClass {
    public native static long convertGray (long mAddrRgba ,long mAddrGray);
}