2015-07-03 54 views
3

我有一個使用gnustl_static作爲C++運行時的項目,它在Application.mk中全局設置。Android NDK:使用預建共享庫時的C++運行時限制

在這個項目中,我想包含一個來自第三方的預構建共享庫,它實現了一些功能。爲此,我使用PREBUILT_SHARED_LIBRARY機制的NDK編譯系統提供:

include $(CLEAR_VARS) 
LOCAL_MODULE := xyzAPI 
LOCAL_SRC_FILES := libxyz-api.so 
include $(PREBUILT_SHARED_LIBRARY) 

再後來用它在主Android.mk

LOCAL_SHARED_LIBRARIES += xyzAPI 

從第三方我知道libxyz-API .so是使用c++_shared運行時創建的。

問題1:我是否需要關心我的依賴庫是用不同的運行時構建的?如果是的話,這是否意味着我不得不將整個項目移動到c++_shared

問題2:由於依賴xyzAPI已經使用c++_shared運行時構建,我現在必須在事物的Java端(即System.loadLibrary("c++_shared");)加載c++_shared嗎?

回答

3
  1. 這絕對是一個值得關注的問題。在一個項目中使用不同的C++運行時並非不可能,但棘手且危險。

  2. 由於jb-mr2(API等級18),系統會爲你做它(見https://code.google.com/p/android/issues/detail?id=34416)。但是,您有責任在APK中打包相關的.so文件,包括所有相關的ABI變體。

綜上所述,筆者認爲,切換到C++ _共享是很容易,看所有可能的故障。

+0

謝謝。你有沒有針對1)的指針或引用? – rsp1984

+0

你可以看看http://stackoverflow.com/a/8877585/192373提供一些提示 - 注意這個答案是關於Windows和Visual Studio的,因此它不適用於你的情況。 –

相關問題