2016-04-04 215 views
0

回到我開發一個Android應用程序,包括本地代碼java.lang.UnsatisfiedLinkError中:從JNI_ERR JNI_OnLoad

首先我編譯預建圖書館。該Android.mk文件是project_path/JNI/QT庫/ 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 /我的庫/ 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,構建腳本編譯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的文件夾,每一個libaries: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中/ 手臂文件加載庫。這個文件夾是否真的存在,或者這只是armeabi和armeabi-v7a在我的情況?

在此先感謝您的幫助

+0

正確的jar文件中的錯誤意味着你的庫中定義一個'JNI_OnLoad'功能,並從它返回'JNI_ERR'。如果你沒有定義一個'JNI_OnLoad'函數,那麼你需要找出它被拖入的位置,以及它爲什麼會失敗。 – fadden

+0

嗨fadden謝謝你的回答。我仍然不明白,因爲我的名爲startTest()的libray中只有一個函數, – suns9

回答

1

我終於解決了我的問題。這是因爲libQt5Core.so文件

事實上,這個庫實現了JNI_OnLoad()函數,它試圖加載外部jar文件中包含的一些java類。

爲了解決我的問題,我包括在/庫

相關問題