2011-08-29 78 views
2

目前在我的程序中有很多共享庫* .so,但似乎NDK只支持jni使用的主共享庫。如何在android ndk中添加多個共享庫?

示例:Java應用程序將使用庫A.so,而A.so對B有依賴關係當我將B和C構建到靜態庫時,然後在LOCAL_STATIC_LIBRARIES的A.so中使用它們,該應用程序運行良好。 當我將B和C構建到共享庫時,然後在LOCAL_SHARED_LIBRARIES的A.so中使用它們,並通過System.loadLibrary(「...」)加載它們中的每一個,該應用程序將在啓動時崩潰。

我想使用所有其他庫作爲共享庫,以便我可以保持我的應用程序的靈活性,我怎麼能在android中正確使用多個共享庫?

附加我Android.mk代碼:

DEPENDENCE_LIBS := gthread-2.0 gmodule-2.0 gobject-2.0 glib-2.0 

ifeq ($(BUILD_STATIC),true) 
    LOCAL_STATIC_LIBRARIES := $(DEPENDENCE_LIBS) 
else 
    LOCAL_SHARED_LIBRARIES := $(DEPENDENCE_LIBS) 
endif 

include $(BUILD_SHARED_LIBRARY) 

如果定義BUILD_STATIC真正,一切運作良好,但如果我定義BUILD_STATIC,能不工作

回答

1

其實我原來的方式是正確的,我只是在圖書館名稱拼寫錯誤。 現在,當我將BUILD_STATIC定義爲false,並使用System.loadLibrary(「lib-name」)加載每個共享庫時,整個過程都能正常工作。

0

我不認爲System.loadLibrary鏈接B.so或C.so到A.所以。它意味着加載你將通過JNI調用的主庫。

如果A.so鏈接到B.so和C.so時,它是否工作?我在想系統應該知道自動鏈接它們。如果沒有,請嘗試使用uselib系統調用。

+0

即使我通過鏈接B.so和C.so構建A.so(使用LOCAL_SHARED_LIBRARIES:= $(DEPENDENCE_LIBS)),它也不能工作。順便說一句,我不能讓uselib(...)工作作爲參考 – Hyden

+0

uselib不存在於Android或它只是不工作?如果它不存在,那麼A.so在嘗試構建它時不會鏈接。如果它作爲Android Linux系統調用存在,也許你只是沒有正確調用它。 –

+0

uselib在Android中不存在,建築物無法通過 – Hyden

相關問題