我已經開始開發一個非常簡單的Android應用程序,它由三個部分組成:Dalvik正在尋找帶有'.0'擴展名的.so文件 - 爲什麼?
- Java應用程序本身
- 預先建立的共享庫(我們叫它
libfoo
) - 另一個共享庫使用預建庫(我們就叫它
libfoowrapper
)
文件系統看起來是這樣的:
jni
Android.mk
libfoo.so
foowrapper.c
的Android.mk
文件包含以下內容:
LOCAL_PATH := $(call my-dir)
#==============================
include $(CLEAR_VARS)
LOCAL_MODULE := foo-prebuilt
LOCAL_SRC_FILES := libfoo.so
include $(PREBUILT_SHARED_LIBRARY)
#=========================
include $(CLEAR_VARS)
LOCAL_MODULE := foowrapper
LOCAL_SRC_FILES := foowrapper.c
LOCAL_SHARED_LIBRARIES := foo-prebuilt
include $(BUILD_SHARED_LIBRARY)
當我在Eclipse中構建應用程序,事情似乎做工精細 - 沒有錯誤報告。然而,當我將應用程序上傳到我的三星體驗(運行Android 4.0.4),我得到的日誌中出現以下錯誤:
03-05 21:20:27.859: E/AndroidRuntime(20324): Caused by: java.lang.UnsatisfiedLinkError: Cannot load library: link_image[1936]: 102 could not load needed library 'libfoo.so.0' for 'libfoowrapper.so' (load_library[1091]: Library 'libfoo.so.0' not found)
爲什麼在Dalvik尋找.so.0
文件,而不是.so
文件?我需要對我的應用程序進行哪些更改才能擺脫此錯誤?
能否請您複製如何正在加載Java方面的庫?您需要執行系統。按照正確的順序在Java中的靜態塊中加載loadLibrary(「foo」)和System.loadLibrary(「foowrapper」)。此外,你是否在其他設備上嘗試過? – Esparver 2013-03-06 08:40:29
聽起來像'libfoowrapper.so'有'libfoo.so.0'的引用。檢查libfoowrapper.so正在被鏈接到什麼位置。 – fadden 2013-03-12 17:07:51