Android操作系统由linux的内核和java的UI构成。但在已往的Android系统上,一般只能用java程序进行开发。若要使用C/C++,通常是将C/C++程序做成lib再由java来调用。理论上说,android上是可以直接用C/C++开发的,因为底层的系统就是linux内核。但以前发布的android NDK,最多是可以用C和最基本的C++进行开发,不能使用STL。所以也就有了Android NDK 的Crystax版本。
所幸的是,最新发布的Android NDK R5版本已支持C++的STL开发了。使用NDK R5编译带STL的C++程序过程比较简单,简要过程说明如下:
1、下载最新的Android SDK,下载Android NDK R5版本。
2、如是在windows平台下需要下载安装Cygwin,用来模拟linux的命令行环境。
3、打开Cygwin,进入到Android NDK R5的路径。声明NDK变量:
export NDK=/path to android NDK R5
4、声明gcc和g++的路径。
5、为要编译的C++程序建一个文件夹,如myproject。在myproject下再建一个jini文件夹,将源代码放在这个文件夹下,myproject/jini。
mkdir myproject
mkdir myproject/jini
6、在jini文件夹下建两个分别名为:android.mk 和 application.mk文件。android.mk类以于C++程序的makefile,application.mk则指明当前程序依赖的库。
android.mk的示例为:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := my_first_app #指明C++程序编译出的可执行程序的名称
LOCAL_SRC_FILES := my_first_app0.cpp \ #指明要编译的源文件,可以有很多个
my_first_app1.cpp \
…
include $(BUILD_EXECUTABLE)#表明编译的是可执行程序
/**************************************************************************/
application.mk的示例为:(在application.mk中指明STL库)
APP_STL := stlport_static
这里选STL库时有三个选项:
system -> Use the default minimal C++ runtime library.
stlport_static -> Use STLport built as a static library.#一般使用这个
stlport_shared -> Use STLport built as a shared library.
7、在myproject目录用android的NDK build工具编译C++程序:
cd myproject
$NDK/ndk-build
如果程序没错的话,会编译出android的可执行程序,位置在myproject/libs/armeabi/my_first_app
8、将编译出来的my_first_app放到手机或是模拟器上运行。到Android SDK的tools目录下找到adb.exe,在windows的cmd上运行adb.exe。
用adb.exe将my_first_app程序push到手机或模拟器的/data/local目录上:
adb.exe push myproject\libs\armeabi\my_first_app /data/local。
9、通过adb,在手机上运行my_frist_app:
在cmd上运行:
adb.exe shell
由此进入到手机的linux终端上,接下来再更改my_first_app的权限使其可以运行:
cd /data/shell
chmod 777 my_first_app
./my_first_app //如果没错的话,这一步即可运行my_first_app
至此在android上编译含STL的C++程序的过程结束。没想象中的复杂,不过也没那么简单。
原创文章,转载请注明: 转载自点滴成河
本文链接地址: 如何在Android平台下编译带STL的C++程序
分享到:
相关推荐
扫描完整版 C++ STL标准程序库开发指南 C++ STL标准程序库开发指南
c++ STL标准程序库 经典之作!值得学习,对个人的技术提升很有帮助!
C++ STL标准程序库开发指南 源代码.rar
C++STL标准程序库开发指南.第2版.闫常友,文字清晰,有目录
C++ STL标准程序库开发指南.第2版.闫常友
c++ STL, stl,stl的学习c++ STL, stl,stl的学习c++ STL, stl,stl的学习c++ STL, stl,stl的学习
STL 是 C++ 标准库的一部分,不用单独安装。 C++ 对模板(Template)支持得很好,STL 就是借助模板把常用的数据结构及其算法都实现了一遍,并且做到了数据结构和算法的分离。例如,vector 的底层为顺序表(数组),...
源代码使用了stl,在任何平台下编译应该都没有问题,使用的都是标准库中的函数。 该程序编译后生成的程序在命令行或终端中运行 选项介绍: -h 帮助 -n 打印行号 -c 注释掉未定义行,而不是清除掉 -Dmacro 预定义宏 ...
用于STL文件读取与显示的C语言程序,简单方便实用。
C++ STL C++ STL C++ STL
C++ stl 深入C++系列 标准化程序文档
C++ STL中文版 C++ STL中文版 C++ STL中文版 C++ STL中文版 C++ STL中文版
微软c++ STL源代码微软c++ STL源代码微软c++ STL源代码微软c++ STL源代码微软c++ STL源代码微软c++ STL源代码微软c++ STL源代码微软c++ STL源代码微软c++ STL源代码微软c++ STL源代码微软c++ STL源代码微软c++ STL源...
C++ STL标准程序库开发指南.第2版.闫常友,是学习STL不可多得的好书
C++ STL--数据结构与算法实现(余文溪)示例程序代码.rar
作为C++标准不可缺少的一部分,STL应该是渗透在C++程序的角角落落里的。STL不是实验室里的宠儿,也不是程序员桌上的摆设,她的激动人心并非昙花一现。本教程旨在传播和普及STL的基础知识,若能借此机会为STL的推广做...
C++17 STL标准库学习教材电子
C++_STL范例大全带书签
从逻辑层次来看,在STL中体现了泛型化程序设计的思想,引入了诸多新的名词,比如像需求requirements,概念concept,模型model,容器container,算法algorithmn,迭代子iterator等。与OOPobject-oriented ...
Standard Template Library Programmer's Guide The Standard Template Library, or STL, is a C++ library of container classes, algorithms, and iterators;...你应该确保你了解模板在C++之前你使用STL。