默认情况下ndk不支持标准C++库,异常, rtti等

 

在ndk文档有关于C++ support的详细介绍

 

一. 使用C++标准库

介绍:

默认是使用最小额度的C++运行时库, 在Application.mk中添加APP_STL指明所需要的库

需要注意的是,目标手机或者模拟器上可能没有下面的共享库,此时就需要你作为静态库使用

ndk中各种库的支持情况

 

PS: stlport和gnustl的区别

    Android NDK不提供STL的原因应该是因为版权问题。因为标准的GNU STL是由libstdc++提供的,本身虽然是GPL,但是只要不修改它的代码,就可以自由使用。而在Android平台上,因为很多适配上的问题,不经修改的libstdc++是无法直接使用的,所以NDK无法直接提供。STLport没有此类限制,所以是比较好的替代解决方案

 

 

使用stlport:

以使用stlport为例子:

 

1.Application.mk中加入

APP_STL := stlport_static 

    PS: 有的手机或者模拟器中可能没有stlport_shared库,运行时可能会报错

 

编写代码

#include <iostream>

#include <stdio.h>

using namespace std;

int main(int argc, char* argv[]) {

    cout << "Hello World" << endl;

    return 0;

 

编译完后:

 

stlport需要包含stlport的库进来在

android-ndk-r10b\sources\cxx-stl目录下有对应版本的stl

比如我们要使用stlport 其头文件一般在

E:\Android\android-ndk-r10b\sources\cxx-stl\stlport\stlport

把上面的路径添加到paths and symbols即可

 
 

成功运行:

 

此时可以使用stl中的各种数据结构,比如map

#include <map>

#include <iostream>

#include <string>

using namespace std;

int main(int argc, char* argv[]) {

    map<int,string> mapStudent;

    mapStudent.insert(map<int, string>::value_type(1,"bing1"));

    mapStudent.insert(map<int, string>::value_type(2,"bing2"));

    mapStudent.insert(map<int, string>::value_type(3,"bing3"));

    mapStudent.insert(map<int, string>::value_type(4,"bing4"));

    map<int, string>::iterator iter;

    for (iter = mapStudent.begin();iter != mapStudent.end();iter++) {

        cout << (*iter).first << " " << (*iter).second << endl;

    }

    return 0;

 

运行结果如下:

 

 

二.使用异常

 

需要注意的几点:

1. 在NDK 5之后才支持C++异常

2. 可以在在android.mk和Application.mk中添加使用异常,

    区别是android.mk是局部的

    Application.mk是全局的

 

添加完毕即可使用

#include <iostream>

using namespace std;

int main(int argc, char* argv[]) {

    try {

        cout << "Hello World" << endl;

    } catch (...) {

        cout << "error" << endl;

    }

    return 0;

 

运行:

 

 

 

三.使用RTTI

同异常一样,不多做介绍

 

代码:

#include <iostream>

#include <typeinfo>

using namespace std;

class CNumber

{

};

int main(int argc, char* argv[])

{

    CNumber nNum ;

    cout << typeid(nNum).name() << endl;

    cout << "Hello World" << endl;

 

运行:

 

 

 

 

 

 

 

 

 

 

 

ndk学习5: ndk中使用c++的更多相关文章

  1. Android JNI和NDK学习(04)--NDK调试方法(转)

    本文转自:http://www.cnblogs.com/skywang12345/archive/2013/05/23/3092812.html 本文主要介绍在ndk中添加log的方法.然后,我们就可 ...

  2. NDK学习二: NDK目录结构

    NDK目录结构   NDK下载好之后目录结构如下:         目录名 描述 build   存放和编译相关的脚本文件,最外面的ndk-build就是调用该目录下的makefile文件,其中mak ...

  3. NDK学习笔记-NDK开发流程

    本文主要是说明一下在eclipse下如何对NDK进行配置 配置NDK 虽然现在基本上都使用Android Studio进行Android开发,但一些项目在eclipse中仍有运用,这里讲一讲eclip ...

  4. ndk学习20: jni之OnLoad动态注册函数

    一.原理 当在系统中调用System.loadLibrary函数时,该函数会找到对应的动态库, 然后首先试图找到"JNI_OnLoad"函数,如果该函数存在,则调用它 JNI_On ...

  5. NDK学习4: Eclipse HelloWorld

    NDK学习4: Eclipse HelloWorld 1.配置Eclipse NDK环境  Window->preferences->android->ndk   2.新建Andro ...

  6. NDK学习笔记(三):DynamicKnobs的机制

    最近的NDK开发涉及到了动态input及动态knobs的问题. 开发需求如下:建立一个节点,该节点能获取每一个input上游的inputframerange信息. 具体下来就是:需要Node的inpu ...

  7. Android JNI和NDK学习(03)--动态方式实现JNI(转)

    本文转自:http://www.cnblogs.com/skywang12345/archive/2013/05/23/3092491.html 前面总结了静态实现JNI的方法,本文介绍如何动态实现J ...

  8. android的ndk学习(1)

    android的ndk学习(1)   之前学了一段时间ndk,总认为要总结一下.ndk使得很方便地实现java和C与C++代码的相互沟通.合理地掌握使用ndk能够提高应用程序的运行效率.所以对于学习a ...

  9. Android NDK学习(1) 简介

    转:http://www.cnblogs.com/fww330666557/archive/2012/12/14/2817385.html 一.What is the NDK? The Android ...

随机推荐

  1. 第1章 认识jQuery

    一.常用的JavaScript库对比 Prototype.Dojo.YUI.Mootools jQuery是一个轻量级的JavaScript库,大型开发必备——由John Resig于2006年创建. ...

  2. cmake 静态调用 c++ dll 的类的一个例子(Clion IDE)[更新1:增加1.模版的应用,2.ma 的算法]

    CMakeLists.txt project(aaa) add_library(aaa SHARED aaa.cpp) add_executable(bbb bbb.cpp) target_link_ ...

  3. MSA:多重比对序列的格式及其应用

    多重比对序列的格式及其应用   这里对多重序列比对格式(Multiple sequence alignment – MSA)进行总结.在做系统演化分析.序列功能分析.基因预测等,都需要涉及到多重序列比 ...

  4. JS判断是否是IE浏览器

    前最短的IE判定借助于IE不支持垂直制表符的特性搞出来的. var ie = !+"\v1"; 仅仅需要7bytes!参见这篇文章,<32 bytes, ehr ... 9, ...

  5. SRS(simple-rtmp-server)

     1.Push h.264 to rtmp server from tcp.

  6. Docker Dockerfile详解

    http://blog.csdn.net/wsscy2004/article/details/25878223 如何使用 Dockerfile用来创建一个自定义的image,包含了用户指定的软件依赖等 ...

  7. VFP笔记

    1.计算圆的面积的计算器 650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/12/43/wKiom1MAsFzxm ...

  8. scala入门教程:scala中的面向对象定义类,构造函数,继承

    我们知道scala中一切皆为对象,函数也是对象,数字也是对象,它是一个比java还要面向对象的语言. 定义scala的简单类 class Point (val x:Int, val y:Int) 上面 ...

  9. emlog在nginx中添加rewrite规则

    rewrite ^/(post|record|sort|author|page)-([-]+)\.html$ /index.php?$=$; rewrite ^/tag-(.+)\.html$ /in ...

  10. Easyui中使用jquery或js动态添加元素时出现的样式失效的解决方法

    Easyui中使用jquery或js动态添加元素时出现的样式失效的解决方法 2014-03-27 11:44:46|  分类: Easy UI|举报|字号 订阅     可以使用$.parser.pa ...