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 ...
随机推荐
- js的DOM对象
1.js的Array对象 ** 创建数组(三种) - var arr1 = [1,2,3]; ...
- Yii2 如何更好的在页面注入JavaScript
先添加一个widgets <?php /** * User: yiqing * Date: 14-9-15 * Time: 下午12:09 */ namespace common\widgets ...
- MV*模式的个人理解
MV*模式主要解决的问题就是 View代码难以维护的问题. MV*模式将View中的逻辑分离出去,形成一个弱逻辑的易于维护的视图. MV*中的*是Model和View的桥梁,负责保持Model和Vie ...
- php 数组排序以及按照某个字段排序
经常,开发人员发现在PHP中使用这种数据结构对值或者数组元素进行排序非常有用.PHP提供了一些适合多种数组的排序函数,这些函数允许你在数组内部对元素进行排列,也允许用很多不同的方法对它们进行重新排序. ...
- root用户自动登录
编辑文件: /etc/gdm/custom.conf的内容: 1 # GDM configuration storage 2 3 [daemon] 4 #GtkModu ...
- php 经典的算法题你懂的
有5个人偷了一堆苹果,准备在第二天分赃.晚上,有一人遛出来,把所有菜果分成5份,但是多了一个,顺手把这个扔给树上的猴了,自己先拿1/5藏了.没想到其他四人也都是这么想的,都如第一个人一样分成5份把多的 ...
- ApacheServer-----关于443端口被占用的解决方法
最经公司项目需要经过Apache服务器转发,自己也下载了ApacheServer,但是在启动的过程中,遇到443端口被占用,网上看了一些解决方法,都不对,没有解决问题. 执行启动命令httpd -k ...
- JS仿Android Toast提示效果
注:这个需要jquery文件来提示支持,所以需要先调用Jquery. <script type="text/javascript" src="js/jquery.j ...
- CentOS的SSH,Putty配置说明
基本资源: CentOS5.5 (32位) , Mysql6.0 ,Putty ,SSH Step: 1.VMWare中装好CentOS A. 可能存在ifconfig等命令无法正常识别) ...
- SparkSql 不支持Date Format (支持Timestamp)
最近项目中需要用到sparksql ,需要查询sql Date类型, 无奈,官方现阶段 1.6.0 还不支持Date类型,不过支持Timestamp类型,所以问题可以解决了. 1.解析 SimpleD ...