2013-03-04 148 views
5

我有一個已發佈的應用程序,它在某些設備上報告java.lang.UnsatisfiedLinkError崩潰。更確切地說,在應用程序崩潰與下面的日誌消息啓動:java.lang.UnsatisfiedLinkError在某些設備上崩潰

Caused by: java.lang.UnsatisfiedLinkError: Couldn't load qcc: findLibrary returned null

實際的崩潰是在System.loadLibrary("qcc");指令,所以應用程序無法找到爲確保庫。

問題是我自己沒有能夠重現這個問題。實際上,相同的apk在許多不同的設備和版本上完美地工作。


該應用程序使用由第三方編寫和編譯的兩個C庫。他們一直在使用arm-linux-androideabi-4.6工具鏈編譯的,而我用下面的Android.mk文件整合他們在我的項目運行nkd-build

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 
LOCAL_MODULE := libqcc 
LOCAL_SRC_FILES := qcc/libqcc.so 
include $(PREBUILT_SHARED_LIBRARY) 

include $(CLEAR_VARS) 
LOCAL_MODULE := libqpe 
LOCAL_SRC_FILES := qpe/libqpe.so 
include $(PREBUILT_SHARED_LIBRARY) 

被報道在不同設備上的錯誤,但他們都在此刻是一個以下Android版本:2.2,2.2.1或2.2.2。


我認爲這可能是一個架構問題或安裝過程中的一個奇怪的問題。

有誰知道這個問題可能是什麼?


UPDATE:

我意識到,我可以重現該問題在Android 2.2模擬器。這是我可以從logcat收集的額外信息。

11:14:59.962 I/dalvikvm( 287): Unable to dlopen(/data/data/.../lib/libqcc.so): Cannot load library: link_image[1995]: failed to link libqcc.so 
11:14:59.962 W/dalvikvm( 287): Exception Ljava/lang/UnsatisfiedLinkError; 
+0

可能是armeabi與armeabi-v7a問題。以防萬一,以防萬一。 – 2013-03-04 18:03:29

+0

Seva Alekseyev是對的,也許你可以嘗試創建一個Application.mk文件(如果你還沒有它): APP_ABI:= armeabi armeabi-v7a – Esparver 2013-03-05 19:42:20

回答

5

在這種情況下,問題是,該庫使用的是不支持Android 2.2的

link是發現問題的方法一些C的方法。

直到Android 2.3(source)纔在系統的C庫中實現諸如pthread_rwlock_init之類的方法。