默认情况下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. Jsp与servlet的区别 1

     Jsp与servlet的区别 2011-12-09 16:27:47 分类: Java 1.jsp经编译后就变成了Servlet.(JSP的本质就是Servlet,JVM只能识别java的类,不能识 ...

  2. springmvc 注解总结

    1.@RequestMapping@RequestMappingRequestMapping是一个用来处理请求地址映射的注解(将请求映射到对应的控制器方法中),可用于类或方法上.用于类上,表示类中的所 ...

  3. git push.default is unset

    warning: push.default is unset; its implicit value is changing inGit 2.0 from 'matching' to 'simple' ...

  4. Hibernate 应用

    完善的持久化层应该达到以下目标: 1.代码可重用性高,能够完成所有的数据库访问操作. 2.如果有需要的话,能够支持多种数据库平台. 3.具有相对独立性,当持久化层的实现发生变化,不会影响上层的实现. ...

  5. CF459A Pashmak and Garden (水

    Pashmak and Garden Codeforces Round #261 (Div. 2) A. Pashmak and Garden time limit per test 1 second ...

  6. [转载]解析用户生命周期价值:LTV

    http://www.sykong.com/2014/07/23144 http://youxiputao.com/articles/1288 http://www.woshipm.com/opera ...

  7. [转]Android性能优化典范

    2015年伊始,Google发布了关于Android性能优化典范的专题,一共16个短视频,每个3-5分钟,帮助开发者创建更快更优秀的Android App.课程专题不仅仅介绍了Android系统中有关 ...

  8. 2015年12月10日 spring初级知识讲解(二)最小化Spring XML配置 注解

    序,随着Spring容器管理Bean数量增加,XML文件会越来越大,而且纯手工配置XML很繁琐,Spring和JAVA都提供了一些注解方式用以简化XML配置. 目录 一.自动装配(autowiring ...

  9. vim颜色选择+按<F9>自动编译运行+其他基本配置(ubuntu)

    (以下是ubuntu上的配置........ 但如果你是在window上的,直接用一下配置吧(懒得介绍了)=.= syntax on filetype indent plugin on set rul ...

  10. Ubuntu 14 如何打开 .chm格式文档?

    好多手册是.chm格式,Ubuntu是需要安装第三方软件才能打开.chm格式文档,操作方式如下: 到“软件中心” -> 搜索“xchm”,并安装 -> 右键某个.chm文档,选择“属性” ...