如何在Android平台下编译带STL的C++程序

在Android平台下编译带STL的C++程序 基础阅读: Windows环境下Android NDK环境搭建 Android操作系统由linux的内核和java的UI构成。但在已往的Android系统上,一般只能用java程序进行开发。若要使用C/C++,通常是将C/C++程序做成lib再由java来调用。理论上说,android上是可以直接用C/C++开发的,因为底层的系统就是linux内核。但以前发布的android 阅读详情

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++程序的过程结束。没想象中的复杂,不过也没那么简单。


OpenGL显示任意Stl文件 通过解析STL文件,使得STL格式的3D模型文件能在手机上显示出来! 立即下载

相关推荐

Android OpenGL绘制STL 3D模型

3D指南针效果 利用OpenGL绘制简单stl格式(未带纹理)的3D模型

android stl,Android NDK中的c++ STL

田海立@优快云 2020-11-25Android NDK(Native Development Kit)提供了一套基于c/c++开发Android应用的工具。基于c/c++开发需要STL (StandardTemplateLibrary/标准模版库),本文描述Android NDK中提供的STL。Android NDK开发是基于Android的,但是不绑定具体某一个Android版本,一个...

weixin_39753213的博客 1106

Android代码-安卓设备展示STL 3D模型

STL文件解析 去年一个关于3D打印的项目里用到 趁着这几天有时间 弄出个展示STL文件格式的demo 很感谢github上另一个分享者的STLViewer项目,本项目是在其代码的原有基础上进行修改的 ,优化了一些东西,修复了展示卡顿,展示不全,展示绘制三角时法线等等问题,增加了适配屏幕的矫正功能。 支持 STl 两种文件格式 ASCII格式和二进制格式 STL格式简介 ASCII格式 ASCII码格式的STL文件逐行给出三角面片的几何信息,每一行以1个或2个关键字开头。 在STL文件中的三角面片的信息单元 facet 是一个带矢量方向的三角面片,STL三维模型就是由一系列这样的三角面片构成。 整个STL文件的首行给出了文件路径及文件名。 在一个 STL文件中,每一个facet由7 行数据组成, facet normal 是三角面片指向实体外部的法矢量坐标, outer loop 说明随后的3行数据分别是三角面片的3个顶点坐标,3顶点沿指向实体外部的法矢量方向逆时针排列。[1] ASCII格式的STL 文件结构如下: 明码://字符段意义 solidfilenamestl//文件路径

Android C++ STL最佳实践

《Android源码中的C++ STL》与《Android源码中C++ STL的namespace》以及《Android NDK中的C++ STL》分别介绍了Android源码中以及NDK环境下有哪些STL有些什么区别,本文主要讲述怎么选择STL,静态库/动态库如何选,有哪些注意点。本文虽针对Android讲解,其中观点亦适用于其他场景。

田海立@优快云 3733

Android下的stl读取3D显示

Android下的3D显示,STL格式文件读取显示。 功能: 1、读取STL格式文件,并显示,3D效果 2、触屏交互,可以自由放缩、旋转、平移物体。 使用: 打开软件后,点击菜单或者屏幕,选择一个stl文件即可。 博客:http://blog.youkuaiyun.com/itas109 QQ技术交流群:129518033 商务合作: healsee2015@163.com itas109@qq.com

DeepSpeed Zero3 Offload实战:从GCC版本检查到环境配置的完整避坑指南

本文是一份针对DeepSpeed Zero3 Offload部署的完整避坑指南。针对训练中常见的`AttributeError: ‘DeepSpeedCPUAdam‘ object has no attribute ‘ds_opt_adam`报错,文章深入剖析了其根源在于GCC编译器版本过低。指南提供了从系统GCC版本深度探查、安全启用高版本GCC环境,到DeepSpeed一致性安装验证的全链路实战方案,旨在帮助用户构建稳定的大模型训练环境。

weixin_29070721的博客 474

ndk编译c++如何使用Android系统库

std::__ndk1未定义符号、libc++_shared.so、ndk cxx-stl

weixin_41660527的博客 2944

CentOS 7 常用命令大全

CentOS中Linux命令

m0_63075763的博客 2019

android 编译STL模块相关错误解决

由于android系统目前没有将boost加入,这里面使用了大量的STL及C++的一些语言特性,导致编译出现令人非常头痛的问题。 1、出现类似的异常函数错误 boost/exception/detail/exception_ptr.hpp:382: error: expected ';' before 'catch' boost/exception/detail/exception_pt

andyhuabing的专栏 1万+

长短期记忆网络(LSTM)预测模型及其Python和MATLAB实现

LSTM 通过独特的门控机制解决了传统 RNN 的梯度消失和梯度爆炸问题,使其在处理长序列时具有显著优势。随着技术的不断发展,LSTM 及其变种(如 Bi-directional LSTM、Stacked LSTM 等)有望在更复杂的任务中发挥重要作用。2. **可视化真实值和预测值**:通过绘图来比较真实值和预测值,判断模型的准确性。2. **输入门(Input gate)**:决定当前的输入信息对细胞状态的影响。1. **细胞状态(Cell state)**:保持信息在时间步之间的传递。

qq_45441438的博客 2056

卡尔曼滤波原理详解及系统模型建立(simulink)

卡尔曼滤波原理详解及系统模型建立(simulink) 卡尔曼滤波器 卡尔曼滤波器是在上个世界五六十年代的时候提出的,到今天已经有六十年左右的时间,但卡尔曼滤波算法不管在控制、制导、导航或者通讯方面对数据的预测能力依然处在一个不可撼动的位置上,但是很多人对于其算法内部的工作原理究竟是怎么运作的依然不理解,所以在工程上很多人都只是把卡尔曼滤波当成是一种“黑箱”预测算法,并不清楚内部原理。但实际上没有任...

weixin_43942325的博客 7万+

linux stl 编译,何在Android平台下编译带STL的C++程序

Android操作系统由linux的内核和java的UI构成。但在已往的Android系统上,一般只能用java程序进行开发。若要使用C/C++,通常是将C/C++程序做成lib再由java来调用。理论上说,android上是可以直接用C/C++开发的,因为底层的系统就是linux内核。但以前发布的android NDK,最多是可以用C和最基本的C++进行开发,不能使用STL。所以也就有了Andr...

weixin_39793708的博客 215

FPGA 上的 YOLOv8 实时目标检测:从模型优化到硬件加速全解析

本文全面解析了将YOLOv8目标检测模型部署到FPGA进行硬件加速的完整流程。通过模型裁剪、混合精度量化等优化手段,结合HLS设计专用计算引擎与数据流,实现了高能效比的实时推理。文章深入探讨了软硬协同部署、性能调试与优化技巧,为追求极致实时性与低功耗的边缘AI应用提供了从算法到硬件的实战指南。

weixin_29031161的博客 608

【转】如何在Android平台下编译带STL的C++程序

android操作系统由linux的内核和java的UI构成。但在已往的Android系统上,一般只能用java程序进行开发。若要使用C/C++,通常是将C/C++程序做成lib再由java来调用。理论上说,android上是可以直接用C/C++开发的,因为底层的系统就是linux内核。但以前发布的android NDK,最多是可以用C和最基本的C++进行开发,不能使用STL。所以也就有了Andr

cheng830306的专栏 1000

某智能物流无人值守系统 ExportReport SQL注入漏洞复现

某智能物流无人值守系统 ExportReport存在SQL注入漏洞,未经身份验证的远程攻击者除了可以利用 SQL 注入漏洞获取数据库中的信息(例如,管理员后台密码、站点的用户个人信息)之外,甚至在高权限的情况可向服务器中写入木马,进一步获取服务器系统权限。

0xSec 819

PyTorch生成式人工智能——VQ-VAE详解与实现

VQ-VAE (Vector Quantised-Variational AutoEncoder) 的核心思想就是将 VAE 的连续潜变量离散化。它通过学习一个码本 (Codebook) 来实现这一点,码本是一个包含有限个嵌入向量的字典。模型不是直接输出一个连续的潜在向量,而是从码本中找出与编码器输出最接近的嵌入向量来代替它。本节首先详细讲解 VQ-VAE 的技术原理,然后使用 PyTorch 从零开始实现 VQ-VAE 模型。

盼小辉丶的博客 3333

Android NDK中的c++ STL

Android NDK(Native Development Kit)提供了一套基于c/c++开发Android应用的工具。基于c/c++开发需要STL (StandardTemplateLibrary/标准模版库),本文描述Android NDK中提供的STL。 Android NDK开发是基于Android的,但是不绑定具体某一个Android版本,一个NDK发布版可以支持多个Android版本。 NDK开发无论静态库还是动态库,libc++都是用NDK里的发布版本打包在应用里。

田海立@优快云 1万+

三态门Multisim电路仿真——硬件工程师笔记

三态门原理及应用摘要 三态门是具有高电平(1)、低电平(0)和高阻态(Z)三种输出的逻辑电路,通过使能端(EN)控制状态切换。高阻态时输出端等效断路,避免信号冲突。其核心应用包括: 总线系统:多设备共享总线时,仅使能选中设备的三态门,其余保持高阻态,防止干扰。 数据选择器:利用三态门切换多路输入信号,简化电路设计。 实现方式分两种: TTL三态门(三极管构成):低电平使能有效,仿真验证输出逻辑与高阻态。 MOS三态门(MOS管构成):高电平使能有效,仿真显示使能信号控制输出状态。 文中还附硬件工程师笔试面试

XU157303764的博客 2011

stl如果开o2_Android NDK编译带STL的 C/C++ 程序

我的这个C/C++程序, 可以成功的交叉编译到中兴,烽火的机顶盒上运行, 原以为编译到android应该也是一件简单的事情,但是做起来远比我想象的复杂得多。我的程序中有 .C 文件 和 .CPP 文件 , 其中 .CPP 文件中用到了 STL的string,编译成功后死活链接不到std::string库,提示报错undefined reference to `std::basic_string ...

weixin_42575325的博客 152

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

android ndk 编译c++11,Android NDK中的c++ STL

田海立@优快云 2020-11-25Android NDK(Native Development Kit)提供了一套基于c/c++开发Android应用的工具。基于c/c++开发需要STL (StandardTemplateLibrary/标准模版库),本文描述Android NDK中提供的STL。Android NDK开发是基于Android的,但是不绑定具体某一个Android版本,一个...

weixin_30781567的博客 1756

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Android NDK编译带STL的 C/C++ 程序

我的这个C/C++程序, 可以成功的交叉编译到中兴,烽火的机顶盒上运行, 原以为编译到android应该也是一件简单的事情, 但是做起来远比我想象的复杂得多。 我的程序中有 .C 文件 和 .CPP 文件 , 其中 .CPP 文件中用到了 STL的string, 编译成功后死活链接不到std::string库,提示报错   undefined reference to `std::bas

Langeldep的专栏 3万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

android.mk编译STL,Android.mk编译带c++ stl的程序

众所周知,Android系统是基于Linux系统的构建的,习惯Linux开发的伙伴们都知道,写Linux程序一般有三种情况:(1)如果你的程序只有一个文件(一般都是一些测试验证程序),那么只需要gcc xxx.c -o xxx就可以了;(2)如果你的工程包含不止一个源文件,那么就需要一个漂亮的Makefile来指定自己的编译器,头文件目录,依赖库吗,源文件等;(3)做过实际产品的人应该知道,一个产...

weixin_30952479的博客 404

Android源码中的c++ STL

Android源码中有内置的LLVM c++ STL和libstdc++标准库,为了支持内置的应用,也会选取NDK的标准库内置其中,本文介绍这些STL以及Android Source模块如何来指定其所要使用的标准库。

田海立@优快云 5850
上一篇: 如何编译Linux内核
下一篇: 关于sendto : Permission denied
yaotinging
博客等级 码龄18年 7粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值