java.lang.UnsatisfiedLinkError:从JNI_OnLoad返回的JNI_ERR
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java.lang.UnsatisfiedLinkError:从JNI_OnLoad返回的JNI_ERR相关的知识,希望对你有一定的参考价值。
我正在开发一个包含本机代码的android应用程序
首先,我编译一个预建的库。 Android.mk文件是project_path / jni / qt-library / Android.mk:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := qt5Core-prebuilt
LOCAL_SRC_FILES := libQt5Core.so
LOCAL_EXPORT_C_INCLUDES += qtbase/include
include $(PREBUILT_SHARED_LIBRARY)
然后我编译我的库,其Android.mk文件是project_path / jni / my-library / Android.mk:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := myLibrary
LOCAL_SRC_FILES := com_example_qtsignaux_Library.cpp
LOCAL_SRC_FILES += Receiver.cpp
LOCAL_SRC_FILES += Emitter.cpp
LOCAL_SRC_FILES += moc_Receiver.cpp
LOCAL_SRC_FILES += moc_Emitter.cpp
LOCAL_SHARED_LIBRARIES := qt5Core-prebuilt
LOCAL_C_INCLUDES += ../qt-library/qtbase/include
LOCAL_LDLIBS := -llog
include $(BUILD_SHARED_LIBRARY)
当我使用ndk-build脚本编译jni文件夹时,一切正常但在调用时遇到以下错误:
static {
System.loadLibrary("myLibrary");
}
java.lang.UnsatisfiedLinkError: JNI_ERR returned from JNI_OnLoad in "/data/app/com.example.qtsignaux-1/lib/arm/libmyLibrary.so"
注意我解压缩了apk文件夹和每个库:libQt5Core.so,libmyLibrary.so和libgnustl_shared.so都在lib / armeabi /和lib / armeabi-v7a / folders中
我的Application.mk文件如下所示:
APP_ABI += armeabi armeabi-v7a
APP_STL := gnustl_shared
APP_CPPFLAGS := -frtti -fexceptions
我真的不明白错误的含义以及系统为什么要在application_package_name / lib / arm文件夹中加载库。这个文件夹真的存在,或者这只是armeabi和armeabi-v7a在我的情况下?
预先感谢您的帮助
我终于解决了我的问题。这是因为libQt5Core.so文件
实际上,这个库实现了JNI_OnLoad()函数,在该函数中它尝试加载外部jar文件中包含的一些java类。
为了解决我的问题,我在/ libs中包含了正确的jar文件
以上是关于java.lang.UnsatisfiedLinkError:从JNI_OnLoad返回的JNI_ERR的主要内容,如果未能解决你的问题,请参考以下文章