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----Ajax异步请求
需要两个PHP页面:1.php是发出请求和接受请求结果的.2.php是处理请求的结果. 1.php中代码: <a href="#" onclick="sendAja ...
- FBX .NET
https://github.com/returnString/ManagedFBX http://fbx.codeplex.com/ http://code.openhub.net/project? ...
- ecshop if标签,超过N条,就输出记录 elseif、库存显示方式
<!--商品详情右侧 相关商品推荐--> <!-- {if $related_goods} --> <!--{foreach from=$related_goods it ...
- 服务器后台TCP连接存活问题
0. 背景 公司的服务器后台部署在某一个地方,接入的是用户的APP,而该地方的网络信号较差,导致了服务器后台在运行一段时间后用户无法接入,那边的同事反馈使用netstat查看系统,存在较多的TCP连接 ...
- SHIFT后门拿服务器之方法总结
提权工具如下:cmd.exe Churrasco.exe nc.exe 提权前提:Wscript组件成功开启 如果Wscript组件被关闭,则使用以下方法开启: 源代码: <object run ...
- jQuery 鼠标拖拽移动窗口
拖拽移动需要注意的是:拖拽移动的窗口是如何定位的,如果"left"属性为"%" ,以"margin-left"来计算定位,如下实例,如果&q ...
- yii2 登录、退出、自动登录
自动登录的原理很简单.主要就是利用cookie来实现的在第一次登录的时候,如果登录成功并且选中了下次自动登录,那么就会把用户的认证信息保存到cookie中,cookie的有效期为1年或者几个月. 在下 ...
- jqxTreeGrid
基本TreeGrid样本 <!DOCTYPE html> <html lang="en"> <head> <title id=" ...
- Task异常处理
http://www.cnblogs.com/xray2005/archive/2011/08/24/2151459.html
- Oracle 中count(1) 和count(*) 的区别
count()与count(*)比较: 如果你的数据表没有主键,那么count()比count(*)快 如果有主键的话,那主键(联合主键)作为count的条件也比count(*)要快 如果你的表只有一 ...