2012-01-16 61 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) 

我對庫的目錄結構:

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

我每次複製libDependentLib.so在運行應用程序之前armeabi。加載庫是這樣完成的:

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

這運行正常。但由於某些要求,我不得不將外部lib名稱更改爲DependentLib_1。我在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。所以同樣應該尋找。除了Andorid.mk和jni加載libDependentLib.so被引用? 注:Android項目包含了新的lib

回答

0

貴libjniLayer.so取決於libDependentLib.so?
如果是這樣,因爲當libjniLayer.so建立連接。所以(libDependentLib.so)提出的依賴的名字不能重命名libDependentLib.so的目標代碼。所以如果你重命名libDepenedentLib.so,jniLayer.so仍然在尋找libDependentLib.so。