我想構建一個JNI接口到現有的C++代碼庫。我已經爲我的JNI函數成功構建了一個.so文件,並且可以在Java代碼中成功調用該函數。從Android上的JNI庫引用預構建的共享庫
當我轉到下一步,即調用libpng中的函數(編譯爲帶有NDK工具鏈的.so文件)時,我能夠成功構建與我的JNI函數關聯的共享庫,並且.MK文件會將libpng12.so複製到libs/armeabi目錄中。
將應用程序部署到模擬器將JNI .so和libpng.so放到/ data下的應用程序文件夾的lib目錄中。爲我的JNI庫調用System.loadLibrary會導致在我的應用程序的lib目錄中找到該代碼。
但是,當代碼嘗試訪問libpng.so文件時,我得到一個UnsatisfiedLinkError。在模擬器上使用strace,我發現它試圖從/ system/lib加載libpng.so,而不是從加載JNI庫的位置加載。
是否有某種方法來控制引用庫從哪裏加載?它似乎不應該被安裝在/ system/lib;部署應用程序將引用的.so文件放在應用程序的lib目錄中似乎表明它會在那裏找到。
對於它的價值,這裏我們使用的是.MK文件: LOCAL_PATH:= $(叫我-DIR)
include $(CLEAR_VARS)
LOCAL_MODULE := png12
LOCAL_SRC_FILES := libpng12.so
LOCAL_EXPORT_C_INCLUDES := /home/jipping/libpng-1.2.44
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := PNGLib
LOCAL_SRC_FILES := PNGLib.cpp
LOCAL_SHARED_LIBRARY := png12
LOCAL_LDLIBS := -L/cygdrive /c/Users/mcfall/workspace/AndroidCalculator/jni -lpng12
LOCAL_C_INCLUDES := /home/mcfall/libpng-1.2.44
include $(BUILD_SHARED_LIBRARY)
預先感謝任何幫助。