【问题标题】:java.lang.UnsatisfiedLinkError: JNI_ERR returned from JNI_OnLoadjava.lang.UnsatisfiedLinkError:从 JNI_OnLoad 返回的 JNI_ERR
【发布时间】:2016-07-24 15:14:38
【问题描述】:

我正在开发一个包含本机代码的 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/ 文件夹中

我的 Application.mk 文件如下所示:

APP_ABI += armeabi armeabi-v7a
APP_STL := gnustl_shared
APP_CPPFLAGS := -frtti -fexceptions 

我不太明白这个错误是什么意思,为什么系统会尝试在 application_package_name/lib/arm 文件夹中加载库。这个文件夹真的存在吗,或者在我的情况下这只是 armeabi 和 armeabi-v7a?

提前感谢您的帮助

【问题讨论】:

  • 这个错误意味着你的库定义了一个JNI_OnLoad函数,并从中返回了JNI_ERR。如果你没有定义 JNI_OnLoad 函数,那么你需要弄清楚它是从哪里拉进来的,以及它为什么会失败。
  • 您好,感谢您的回答。我仍然不明白,因为我的库中只有一个名为 startTest() 的函数

标签: android android-ndk ndk-build


【解决方案1】:

我终于解决了我的问题。这是因为 libQt5Core.so 文件

这个库确实实现了 JNI_OnLoad() 函数,它尝试加载包含在外部 jar 文件中的一些 java 类。

为了解决我的问题,我在 /libs 中包含了正确的 jar 文件

【讨论】:

  • 那是哪个罐子?
  • 嗨 Matferib,这是以下库之一: QtAndroid-bundled.jar cessibility-bundled.jar QtAndroidBearer-bundled.jar QtAndroidBluetooth-bundled.jar QtAndroidWebView-bundled.jar QtMultimedia-bundled.jar QtPositioning- bundled.jar QtSensors-bundled.jar 我是从 Qt 源获得的
  • 酷,我调用 QApplication 后我的应用程序仍然崩溃。您是使用 android_ndk_glue(如纯 C++ 代码)还是在 java 中创建活动?
  • 我在 java 中创建活动并初始化加载 .so 文件的 c++ 部分
猜你喜欢
  • 1970-01-01
  • 2012-02-20
  • 1970-01-01
  • 2014-10-26
  • 2014-10-10
  • 2012-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多