2012-01-16 1 views
2

Android NDKを使用してAndroidアプリを開発しています。アプリケーションのJNIレイヤーは共有ライブラリ 'libDependentLib.so'に依存します。私android.mkは、次のようになります。Android NDKで従属ライブラリの名前を変更するとUnsatisfiedLinkErrorが発生する

LOCAL_PATH := $(call my-dir) 
include $(call all-subdir-makefiles) 
include $(CLEAR_VARS) 
TARGET_PLATFORM := 'android-10' 
LOCAL_CPP_EXTENSION := .cpp 
LOCAL_CPPFLAGS += -fno-exceptions -fno-rtti   
MY_LOCAL_PATH := $(LOCAL_PATH)/../ 
LOCAL_LDLIBS := -L$(call host-path, $(MY_LOCAL_PATH)/libs) -lDependentLib 
LOCAL_C_INCLUDES := $(MY_LOCAL_PATH)/include-all $(MY_LOCAL_PATH)/include 
MY_FILES := abc.cpp xyz.cpp 
LOCAL_LDLIBS += -lm -llog -lstdc++ 
LOCAL_SRC_FILES += $(MY_FILES) 
LOCAL_MODULE := jniLayer 
include $(BUILD_SHARED_LIBRARY) 

LIBSのための私のディレクトリ構造は次のとおりです。

<Android_Project> 
     | 
    libs----armeabi-----libjniLayer.so 
     |  |---------libstlport_shared.so 
     |-----------------libDependentLib.so 

私はアプリを実行する前にarmeabiするlibDependentLib.soをコピーするたびに。 libsのロードは次のように行われます:

static { 
    try { 
     /* loading the libraries */ 
     System.loadLibrary("stlport_shared"); 
     System.loadLibrary("DependentLib"); 
     System.loadLibrary("jniLayer"); 
    } catch (Throwable th) { 
     th.printStackTrace(); 
    } 
} 

これは正常に動作します。しかし、いくつかの要件のために、私はDependentLib_1に外部lib名を変更することを余儀なくされています。私はAndroid.mkで同じ名前を変更しましたが、JavaのlibsとAndroidProjectのライブラリ名を読み込んでいました。しかし、アプリケーションはSystem.loadLibrary( "jniLayer")で失敗します。と言っています

java.lang.UnsatisfiedLinkError: Cannot load library: link_image[1966]:88 could not load needed library 'libDependentLib.so' for 'libjniLayer.so' (load_library[1108]: Library 'libDependentLib.so' not found) 

なぜlibDependentLib.soがまだ検索されているのかわかりません。私はlibDependentLib_1.soにすべての名前を変更しました。だから同じものが求められるはずです。 libDependentLib.soが参照されているAndorid.mkとjniローディングは別として? 注:Androidプロジェクトには新しいライブラリが含まれています

答えて

0

libjniLayer.soはlibDependentLib.soに依存していますか? libjniLayer.soが構築されている場合ので
もしそうなら、あなたがlibDependentLib.soの名前を変更することはできませんリンカは、オブジェクトコードに.soの依存の名前(libDependentLib.so)を置きます。したがって、libDepenedentLib.soの名前を変更すると、jniLayer.soは引き続きlibDependentLib.soを探します。

関連する問題