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 !");
}
<。> .so文件是... project_root / libs / armeabi / libhello-jni.so
答案 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。