5

java.lang.UnsatisfiedLinkError一部のデバイスでクラッシュを報告している公開アプリケーションがあります。より正確に言うと、起動時にアプリがクラッシュし、次のログメッセージが表示されます。

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

実際のクラッシュはSystem.loadLibrary("qcc");命令に含まれているため、アプリはライブラリを確実に検出していません。

問題は、自分で問題を再現できなかったことです。実際、同じapkは多くの異なるデバイスやバージョンで完全に機能します。


このアプリは、第三者によって作成およびコンパイルされた2つのCライブラリを使用します。これらはツールチェーンを使用してコンパイルされており、次のファイルを使用しarm-linux-androideabi-4.6て実行しているプロジェクトに統合しています。nkd-buildAndroid.mk

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です。


アーキテクチャの問題か、インストール中の奇妙な問題のいずれかである可能性があると思います。

誰かが問題が何であるか知っていますか?


アップデート:

Android2.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;
4

1 に答える 1

5

この場合の問題は、ライブラリが Android 2.2 でサポートされていない C メソッドを使用していたことです。

このリンクは、問題を発見する方法でした。

などのメソッドは、Android 2.3 ( sourcepthread_rwlock_init )までシステムの C ライブラリに実装されていません。

于 2013-03-11T19:17:43.623 に答える