2011-06-17 58 views
2

我想構建一個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) 

預先感謝任何幫助。

回答

0

嘗試使用System.loadLibrary加載libpng12.so。在加載你的jni庫之前這樣做,以便所有需要的符號都已經加載。

相關問題