2013-03-04 149 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之类的方法。