默认情况下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. Flash性能优化

    Adobe Scout All the internal operations of Flash Player. Flash Builder Actionscript 3 code level pro ...

  2. thinkphp删除

    $result = M('content')->where('id>0')->delete $result =M('content')->where(array('id'=&g ...

  3. XML模块

    XML 例子: # -*- encoding:utf-8 -*- import requests from xml.etree import ElementTree as ET f = request ...

  4. 浅谈JavaScript中的定时器

    引言 使用setTimeout()和setInterval()创建的定时器可以实现很多有意思的功能.很多人认为定时器是一个单独的线程(之前我也是),但是JavaScript是运行在单线程环境中的,而定 ...

  5. android自定义控件(9)-Android触摸事件分发机制

    触摸事件的传递机制:   首先是最外层的viewgroup接收到事件,然后调用会调用自己的dispatchTouchEvent方法.如果在ACTION_DOWN的时候dispatchTouchEven ...

  6. [IOC]Unity使用

    Unity是什么? unity是patterns&practices团队开发的一个轻量级.可扩展的依赖注入容器. Unity特性 1.它提供了创建(或者装配)对象实例的机制,而这些对象实例可能 ...

  7. _fastcall

    * 1楼 __fastcall具体含义 在C语言中,假设我们有这样的一个函数: int function(int a,int b) 调用时只要用result = function(1,2)这样的方式就 ...

  8. javascript 数据类型转换

    javascrīpt 类型转换函数 在Javascrīpt中,Double类型和Int类型都是看作为Number对象. 1.Number转成String number.toString() Strin ...

  9. Linux下Redis常用命令

    >src/redis-server  启动 Redis 服务  或者>src/redis-server redis.conf src/redis-server redis.conf 1&g ...

  10. sqoop

    http://blog.csdn.net/yfkiss/article/details/8700480 http://www.cnblogs.com/admln/p/sqoop1-99-4-javaa ...