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 ...
随机推荐
- php上传$_FILES 无法取值
无法取值的主要原因在form. 代码 <form method="post" action="****" name="theForm" ...
- TCP/IP协议详解 卷1—读书笔记(1)
0. 前言 本系列简要记录该书的关键点,用以梳理知识点. 1. 简介 简述链路层下的一些相关协议,如以太网IP数据报,802标准,SLIP,CSLIP,PPP. 链路层主要为上层(IP)和本层(ARP ...
- java中的各个数据结构区别
ArrayList 和Vector是采用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,都允许直接序号索引元素,但是插入数据要设计到数组元素移动等内存操作,所以索引数据快插入数据慢 ...
- tmux常用命令
tmux命令可以启动一个tmux服务,tmux服务包含多个session,session包含多个window,window包含多个pane. 常用命令tmux ls #显示已有tmux列表(C-b s ...
- php/js互传cookie中文乱码的问题
问题发现: 过去好好的,今天突然网页出现了问题. 在猎豹和IE都出现问题,在360浏览器就正常. 经过排错,最终发现: js存储cookie,php读取的时候成了乱码 . 问题分析: 这是因为文字编 ...
- ES6新特性--多行文本
由于多行字符串用\n写起来比较费事,所以最新的ES6标准新增了一种多行字符串的表示方法,用` ... `表示: `这是一个 多行 字符串`;
- Oracle 中count(1) 和count(*) 的区别
count()与count(*)比较: 如果你的数据表没有主键,那么count()比count(*)快 如果有主键的话,那主键(联合主键)作为count的条件也比count(*)要快 如果你的表只有一 ...
- 性能:15个JavaScript本地存储技术的函数库和工具
当构建更复杂的JavaScript应用程序运行在用户的浏览器是非常有用的,它可以在浏览器中存储信息,这样的信息可以被共享在不同的页面,浏览会话. 在最近的过去,这将有可能只被cookies文本文件保存 ...
- php各种编码集详解和以及在什么情况下进行使用
字符是各种文字和符号的总称,包括各国家文字.标点符号.图形符号.数字等. 字符集是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同,常见字符集名称:ASCII字符集.GB2312字符集.B ...
- python __future__ package的几个特性
我学习python过程, 和学习其它编程知识一样, 不是先读大部头书系统学习, 而是看博客和直接实践, 慢慢将这些知识点连成线, 再扩展到面. 这个过程缺点和优点都很明显. 缺点是, 有些知识点可能因 ...