ndk学习5: ndk中使用c++
默认情况下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++的更多相关文章
- Android JNI和NDK学习(04)--NDK调试方法(转)
本文转自:http://www.cnblogs.com/skywang12345/archive/2013/05/23/3092812.html 本文主要介绍在ndk中添加log的方法.然后,我们就可 ...
- NDK学习二: NDK目录结构
NDK目录结构 NDK下载好之后目录结构如下: 目录名 描述 build 存放和编译相关的脚本文件,最外面的ndk-build就是调用该目录下的makefile文件,其中mak ...
- NDK学习笔记-NDK开发流程
本文主要是说明一下在eclipse下如何对NDK进行配置 配置NDK 虽然现在基本上都使用Android Studio进行Android开发,但一些项目在eclipse中仍有运用,这里讲一讲eclip ...
- ndk学习20: jni之OnLoad动态注册函数
一.原理 当在系统中调用System.loadLibrary函数时,该函数会找到对应的动态库, 然后首先试图找到"JNI_OnLoad"函数,如果该函数存在,则调用它 JNI_On ...
- NDK学习4: Eclipse HelloWorld
NDK学习4: Eclipse HelloWorld 1.配置Eclipse NDK环境 Window->preferences->android->ndk 2.新建Andro ...
- NDK学习笔记(三):DynamicKnobs的机制
最近的NDK开发涉及到了动态input及动态knobs的问题. 开发需求如下:建立一个节点,该节点能获取每一个input上游的inputframerange信息. 具体下来就是:需要Node的inpu ...
- Android JNI和NDK学习(03)--动态方式实现JNI(转)
本文转自:http://www.cnblogs.com/skywang12345/archive/2013/05/23/3092491.html 前面总结了静态实现JNI的方法,本文介绍如何动态实现J ...
- android的ndk学习(1)
android的ndk学习(1) 之前学了一段时间ndk,总认为要总结一下.ndk使得很方便地实现java和C与C++代码的相互沟通.合理地掌握使用ndk能够提高应用程序的运行效率.所以对于学习a ...
- Android NDK学习(1) 简介
转:http://www.cnblogs.com/fww330666557/archive/2012/12/14/2817385.html 一.What is the NDK? The Android ...
随机推荐
- Debian 8安装ibus输入法
# apt-get install ibus ibus-sunpinyin ibus-table-wubi
- mysql的Replication机制
mysql的Replication机制 参考文档:http://www.doc88.com/p-186638485596.html Mysql的 Replication 是一个异步的复制过程. 从上图 ...
- ASP.NET MVC使用Bootstrap系列(5)——创建ASP.NET MVC Bootstrap Helpers
阅读目录 序言 内置的HTML Helpers 创建自定义的Helpers 使用静态方法创建Helpers 使用扩展方法创建Helpers 创建Fluent Helpers 创建自动闭合的Helper ...
- 浅谈JavaScript中的能力检测
引言 我们知道,各个版本的浏览器有着许多不一致性.理想状态下,应该是所有的浏览器都提供一套标准的API接口.但是现实中,各个版本的浏览器存在的怪癖非常多,我们通常都是使用客户端检测来作为补救措施.但是 ...
- C# 对象 序列化 XML
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...
- 【转】asp.net mvc 页面跳转
1.使用传统的Response.Redirect例如string url = "/account/create";Response.Redirect(url); 1.Server. ...
- Memcached存储命令 - replace
Memcached replace 命令用于替换已存在的 key(键) 的 value(数据值). 如果 key 不存在,则替换失败,并且您将获得响应 NOT_STORED. replace 命令的基 ...
- php怎么获取mac地址?
如何用php获取mac地址呢?大家知道mac地址是电脑在全球范围的唯一标识,所以这个就非常实用,比如说要做一个投票功能,那mac地址是必不可少 的,如果单纯的靠ip地址来判断这个肯定是不准确的,水分太 ...
- Mastering Web Application Development with AngularJS 读书笔记-前记
学习AngularJS的笔记,这个是英文版的,有些地方翻译的很随意,做的笔记不是很详细,用来自勉.觉得写下来要比看能理解的更深入点.有理解不对的地方还请前辈们纠正! 一.关于<Mastering ...
- JAVA访问权限控制[zhuan]
Java的访问权限控制修饰符,从最大权限到最小权限依次是:public.protected.包访问权限(默认,没有关键字)和private.对于类的访问权限只能是:public和包访问权限(但内部类可 ...