多语言展示
当前在线:580今日阅读:4今日分享:26

ndk c++11 thread rtti exception stl

ndk升级到r10后,开始支持c++11了,c++11增加了许多新的元素,对于用c++的来说是一个好事,因为c++标准都开始支持 auto,thread,rtti,lock,exception,stl, 那么以后c++跨平台就更容易了    方便他人亦是方便自己,如果觉得还行就点下右边的投票吧,这样可以帮助其他人更快的找到解决问题的方法;有疑问的也可留言哦, 谢谢!
工具/原料
1

Eclipse 

2

android sdk r24

3

android-ndk-r10e

4

Win8.1 x64

方法/步骤
1

nkd的配置主要是两个文件:Android.mk 和 Application.mk

2

# 获取当前文件LOCAL_PATH := $(call my-dir)# 加载第三方静态库include $(CLEAR_VARS)LOCAL_MODULE := cfitsioLOCAL_SRC_FILES := libs/$(TARGET_ARCH_ABI) /libcfitsio.ainclude $(PREBUILT_STATIC_LIBRARY)include $(CLEAR_VARS)# 模块名LOCAL_MODULE    := ColorspaceServer # 头文件路径LOCAL_C_INCLUDES :=   \     $(LOCAL_PATH)/third/cfitsio    \     $(LOCAL_PATH)          \     $(LOCAL_PATH)/platform     \     $(LOCAL_PATH)/network     # 源文件路径LOCAL_SRC_FILES := \      colorspace_res_BrightNdk.cpp \      platform\csPlatform.cpp   \      network\csPtcl.cpp    \      network\csClient.cpp# 链接系统库LOCAL_LDLIBS    := -landroid -llog -lz# 链接第三方库LOCAL_STATIC_LIBRARIES := cfitsio# 增加对 异常 和 rtti 的支持LOCAL_CPPFLAGS := -fexceptions -frtti# 采用 c++ 11 标准#LOCAL_CPPFLAGS += -std=c++1y -D__cplusplus=201300L# 采用 c++ 14 标准LOCAL_CPPFLAGS += -std=c++11 -D__cplusplus=201103L# 生成动态链接库include $(BUILD_SHARED_LIBRARY)# 修改path路径#$(call import-add-path, $(LOCAL_PATH))# 编译path路径下的模块 #$(call import-module, third/cfitsio)

3

这是我的Application.mk文件:APP_ABI := x86APP_STL := gnustl_staticNDK_TOOLCHAIN_VERSION := 4.9APP_OPTIM := debug

4

下面开始逐个的说明:

5

1、支持标准:在 Android.mk 中加入① c++ 11 标准:LOCAL_CPPFLAGS += -std=c++11② c++ 14标准:LOCAL_CPPFLAGS += -std=c++1y如下图所示加与不加的效果:

6

2、支持STL:在Application.mk中加入:APP_STL := gnustl_static

7

3、支持线程库:当增加c++11或者c++14标准后,ndk就已经支持了thread class,但是由于eclipse存在bug,导致 __cplusplus 宏被定义了,但是没有赋值,从而导致eclipse 上会出现错误,解决的方法就是追加上对宏的赋值在Android.mk中增加:① c++ 11 标准:LOCAL_CPPFLAGS += -D__cplusplus=201103L② c++ 14 标准:LOCAL_CPPFLAGS += -D__cplusplus=201300L在代码中增加头文件:#include 效果图如下(改完后多刷新几次)

8

4、支持异常处理在Android.mk中增加:LOCAL_CPPFLAGS := -fexceptions  在代码中增加头文件:#include 如下图分别是:try catch 和 exception  的使用

9

5、支持运行时类型信息(检查)在Android.mk中增加:LOCAL_CPPFLAGS := -frtti 在代码中增加头文件:#include 如下图加了标志位和没有加标志位的效果:

10

方便他人亦是方便自己,如果觉得还行就点下下边的投票吧,这样可以帮助其他人更快的找到解决问题的方法;有疑问的也可留言哦, 谢谢!

推荐信息