Android NDKAndroid技术分享NDK

NDK支持的C++运行库

2016-08-16  本文已影响299人  Andy周

Android平台自身带有一个微型的C++运行库支持库,称为系统运行库,但是功能有所限制,还有一些补充系统库的额外C++运行库

C++运行库 C++异常支持 C++ RTTI支持 C++标准库
系统库 No No No
GAbi++ No Yes No
STLport++ No Yes Yes
GNU STL Yes Yes Yes

1.GAbi++ C++运行库

GAbi++ C++运行库是一个试验性的,最简化的运行库,它提供建立在系统运行库所提供的相同特性集基础之上的RTTI支持。它可以作为静态库或共享库使用

2.STLport C++运行库

STLport是一个开源的,多平台的C++标准实现。它提供一个C++标准库头文件的完整集合以及对RTTI的支持。它也可以作为静态库或共享库使用。

3.GNU STL C++运行库

GNU标准 C++支持库,也叫libstdc++-v3,是Android NDK中最全面的标准C++运行库。
在GNU标准C++运行库中,C++异常与C++RTTI均被支持。

指定C++运行库

Android NDK构建系统变量APP_STL可被指定需要使用的C++运行库。

APP_ABI    :=  armeabi armeabi-v7a
APP_STL   :=  system
system:   默认的微型系统C++运行库
gabi++_static:   作为静态库的Gabi++运行库
gabi++_shared:   作为共享库的Gabi++运行库
stlport_static:   作为静态库的STLport运行库
stlport_shared:   作为共享库的STLport运行库
gnustl_static:   作为静态库的GNU STL运行库
gnustl_shared:   作为共享库的STLport运行库

注意:
当C++运行库以共享库的形式使用时,应用程序需要先家长所需要的共享库,然后在加载依赖此共享库的其他原生模块。

static{
     System.loadLibrary("stlport_shared");
     System.loadLibrary("xxxxx");
}

C++异常支持

Java中异常处理很方便,考虑到性能和兼容性,默认情况下C++ Exception支持是不可用的,NDK中需要添加对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机制即在运行库展示对象类型信息。该机制主要执行安全类型转化。
Android.mk配置

LOCAL_MODULE    :=   module
...
LOCAL_CPP_FEATURES   +=  rtti
...
include $(BUILD_SHARED_LIBRARY)

Application.mk配置

APP_STL    :=  gnustl_shared
APP_CPPFLAGS   +=   -frtti

本文引自《Android C++高级编程》

上一篇下一篇

猜你喜欢

热点阅读