From: http://www.cnblogs.com/yaozhongxiao/p/3806494.html

ndk中包含了stl对应的库,在$(NKD_HOME)/sources/cxx-stl/stlport/stlport

有关Android NDK的C++ STL开发相关总结如下:

  1. 从Android NDK r5开始支持了STL Port,在这个版本开始就可以使用部分STL库的功能了,比如说vector、map,string摆脱c下面容易出现的数组未初始化、越界,增强应用的健壮性。不包含相关的头文件就会报编译错误!

  2. 很多网友包含了include 这样头,但仍然无法编译,这里你首先要检查当前文件是否为.cpp后缀,同时为了使用标准库必须加入 APP_STL := stlport_static 在Application.mk文件中。相关对应还有 system 使用默认最小的C++运行库,这样生成的应用体积小,内存占用小,但部分功能将无法支持 stlport_static 使用STLport作为静态库,这项是Android开发网极力推荐的 stlport_shared STLport 作为动态库,这个可能产生兼容性和部分低版本的Android固件,目前不推荐使用。 gnustl_static 使用 GNU libstdc++ 作为静态库

  3. 默认情况下STLPORT是不支持C++异常处理和RTTI,所以不要出现 -fexceptions 或 -frtti ,如果真的需要可以使用gnustl_static来支持标准C++的特性,但生成的文件体积会偏大,运行效率会低一些。 支持C++异常处理,在Application.mk中加入 LOCAL_CPPFLAGS += -fexceptions这句,同理支持RTTI,则加入LOCAL_CPPFLAGS += -frtti,这里Android123再次提醒大家,第二条说的使用gnustl静态库,而不是stlport

  4. 强制重新编译 STLPort ,在Application.mk中加入 STLPORT_FORCE_REBUILD := true 可以强制重新编译STLPort源码,由于一些原因可能自己需要修改下STLPort库,一般普通的开发者无需使用此项。

  5. Android目前目前已有更新的NDK版本,相关的学习可以查看NDK中的Samples整体和在PC上开发没有太大的不同。

  6. 强烈建议做Android NDK开发的童鞋们根据自己的NDK版本,书写application.mk的支持平台,因为你引用的stl库的版本是基于你这个NDK版本的,如果你支持的平台下对stl的兼容存在问题,生成的库文件就可能报加载不成功的错误,而且强烈建议不要使用stl的动态库

  7. NDK r5b对gnustl和stlport的支持差异非常的大,切勿随便混淆,不然你的程序表面编译成功了,暗地了却会给你带来无穷的困扰!!!


更多相关文章

  1. linux系统灵活运用灯[android课程3]
  2. android classes.dex 反编译
  3. 使用gradle来编译生成apk
  4. 换到android 3.0出现duplicate value for resource 'attr/textCo
  5. android 应用程序4种编译方法
  6. Android(安卓)通过配置 productFlavors 实现多版本差异化打包
  7. Android(安卓)MediaPlayer支持的音视频格式和协议
  8. Android(安卓)项目配置之 Version Name & Code
  9. 关于Android(安卓)版本覆盖安装,安装过程中闪退出现的问题,

随机推荐

  1. Android第十八课 VS源码文件导入Android
  2. Android--socket 发送广播的那些坑
  3. 华为十年资深架构师推荐最强Android(安卓
  4. Android进化史
  5. Android(安卓)测试代码编写小技巧 - UI
  6. [Android(安卓)Pro] Android--Sensor传感
  7. 【Android(安卓)Developer】1.一个关于An
  8. android的init实例
  9. 学习Android之用户界面基础
  10. android 中使用socket使native和framewor