我正在開發使用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