Android平臺(tái)自身帶有一個(gè)微型的C++運(yùn)行庫支持庫护昧,稱為系統(tǒng)運(yùn)行庫糙麦,但是功能有所限制偎窘,還有一些補(bǔ)充系統(tǒng)庫的額外C++運(yùn)行庫
C++運(yùn)行庫 | C++異常支持 | C++ RTTI支持 | C++標(biāo)準(zhǔn)庫 |
---|---|---|---|
系統(tǒng)庫 | No | No | No |
GAbi++ | No | Yes | No |
STLport++ | No | Yes | Yes |
GNU STL | Yes | Yes | Yes |
1.GAbi++ C++運(yùn)行庫
GAbi++ C++運(yùn)行庫是一個(gè)試驗(yàn)性的购公,最簡化的運(yùn)行庫蕴侣,它提供建立在系統(tǒng)運(yùn)行庫所提供的相同特性集基礎(chǔ)之上的RTTI支持另锋。它可以作為靜態(tài)庫或共享庫使用
2.STLport C++運(yùn)行庫
STLport是一個(gè)開源的滞项,多平臺(tái)的C++標(biāo)準(zhǔn)實(shí)現(xiàn)。它提供一個(gè)C++標(biāo)準(zhǔn)庫頭文件的完整集合以及對(duì)RTTI的支持夭坪。它也可以作為靜態(tài)庫或共享庫使用文判。
3.GNU STL C++運(yùn)行庫
GNU標(biāo)準(zhǔn) C++支持庫,也叫l(wèi)ibstdc++-v3室梅,是Android NDK中最全面的標(biāo)準(zhǔn)C++運(yùn)行庫戏仓。
在GNU標(biāo)準(zhǔn)C++運(yùn)行庫中,C++異常與C++RTTI均被支持亡鼠。
指定C++運(yùn)行庫
Android NDK構(gòu)建系統(tǒng)變量APP_STL可被指定需要使用的C++運(yùn)行庫赏殃。
APP_ABI := armeabi armeabi-v7a
APP_STL := system
system: 默認(rèn)的微型系統(tǒng)C++運(yùn)行庫
gabi++_static: 作為靜態(tài)庫的Gabi++運(yùn)行庫
gabi++_shared: 作為共享庫的Gabi++運(yùn)行庫
stlport_static: 作為靜態(tài)庫的STLport運(yùn)行庫
stlport_shared: 作為共享庫的STLport運(yùn)行庫
gnustl_static: 作為靜態(tài)庫的GNU STL運(yùn)行庫
gnustl_shared: 作為共享庫的STLport運(yùn)行庫
注意:
當(dāng)C++運(yùn)行庫以共享庫的形式使用時(shí),應(yīng)用程序需要先家長所需要的共享庫间涵,然后在加載依賴此共享庫的其他原生模塊仁热。
static{
System.loadLibrary("stlport_shared");
System.loadLibrary("xxxxx");
}
C++異常支持
Java中異常處理很方便,考慮到性能和兼容性勾哩,默認(rèn)情況下C++ Exception支持是不可用的抗蠢,NDK中需要添加對(duì)C++異常的支持。
Android.mk配置
LOCAL_MODULE := module
...
LOCAL_CPP_FEATURES += exceptions
...
include $(BUILD_SHARED_LIBRARY)
Application.mk配置
APP_STL := gnustl_shared
APP_CPPFLAGS += -fexceptions
也可用同樣的方式啟用C++RTTI的支持思劳。
C++RTTI支持
RTTI機(jī)制即在運(yùn)行庫展示對(duì)象類型信息迅矛。該機(jī)制主要執(zhí)行安全類型轉(zhuǎn)化。
Android.mk配置
LOCAL_MODULE := module
...
LOCAL_CPP_FEATURES += rtti
...
include $(BUILD_SHARED_LIBRARY)
Application.mk配置
APP_STL := gnustl_shared
APP_CPPFLAGS += -frtti
本文引自《Android C++高級(jí)編程》