java.lang.UnsatisfiedLinkError中

时间:2011-01-27 06:18:52

标签: android android-ndk

java.lang.UnsatisfiedLinkError中

我正在使用hello-jni示例,无论出于何种原因,当我尝试调用hello-jni库时,我得到一个java.lang.UnsatisfiedLinkError。有什么想法吗?我必须在某处设置路径吗?

HelloJni.java中的

public native String  stringFromJNI();

static {
    System.loadLibrary("hello-jni");
}

在hello-jni.c中:

jstring
Java_com_bdunlay_hellojni_HelloJni_stringFromJNI( JNIEnv* env,
                                                  jobject thiz )
{
    return (*env)->NewStringUTF(env, "Hello from JNI !");
}

exception trace

<。> .so文件是... project_root / libs / armeabi / libhello-jni.so

4 个答案:

答案 0 :(得分:5)

你的家乡没有JNIEXPORT。它通常在头文件中声明函数声明。

我们将使用javah -jni生成标题

答案 1 :(得分:4)

有关其他详细信息,请参阅android-ndk-r8b / documentation.html。

默认情况下,示例不包含Application.mk文件(位于/ jni /文件夹中)。我通过将此文件添加到我的项目并添加以下单个条目来更正了问题,该条目允许构建多个CPU类型的构建文件(特别是在我的情况下查找x86):

APP_ABI := armeabi armeabi-v7a x86

添加该文件后,您可以再次运行ndk-build以生成所需文件,然后正常构建APK。

答案 2 :(得分:0)

java.lang.UnsatisfiedLinkError:OpenCV方法的本机方法未找到异常意味着您在初始化之前尝试使用OpenCV。只有在onManagerConnected状态为LoaderCallbackInterface.SUCCESS之后,才可以使用OpenCV对象并从库中调用方法。

答案 3 :(得分:0)

在我的情况下,错误的原因是: 如果您有多个库加载为

System.loadLibrary("lib1");
System.loadLibrary("lib2");

和lib1依赖于lib2,你需要先加载lib2。