android交叉编译pidstat iostat mpstat

android交叉编译pidstat iostat mpstat

文章目录

  • android交叉编译pidstat iostat mpstat
    • 编译环境
      • 编译工具下载
    • 编译过程
      • 编译环境
        • 系统环境
        • NDK版本的选择
      • 源码下载
      • 只编译简单的pidstat mpstat iostat
        • 编译
        • 编译脚本
        • 问题
      • 使用
      • 技术支持

编译环境

编译工具下载

参考这个:https://blog.csdn.net/gaoliang0/article/details/81913291

或者官网 NDK编译工具下载: https://developer.android.google.cn/ndk/downloads?hl=zh-cn

官网老版本: https://github.com/android/ndk/wiki/Unsupported-Downloads

或者从我的百度网盘:

链接:https://pan.baidu.com/s/1FEtM6mVNgER_DvC2myHB5Q?pwd=28l9
提取码:28l9
–来自百度网盘超级会员V6的分享

准备下载 android-ndk-r19c-linux-x86_64.zip 因为这个版本比较适中

编译过程

编译环境

系统环境

系统环境:

iyfangfeng@iyfangfeng:~/libsrc/ffmpeg/basic/clangffmpeg0511$ uname -a
Linux iyfangfeng 5.4.0-150-generic #167~18.04.1-Ubuntu SMP Wed May 24 00:51:42 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux

NDK版本:

aarch64-linux-android-4.9

以下只编译armeabi-v7a版本如果需要编译其他版本 可以参考 build_fdkaac_all.sh 方式

NDK版本的选择

当前Google给的NDK工具支持GCC最高版本android-ndk-r17c-linux-x86_64.zip之后的版本不再支持gcc,只支持clang来编译,而使用gcc或者clang编译在编译脚本上存在差别,所以需要注意着点。

选择哪个版本取决于使用的编译脚本。

下面的ffmpeg因为涉及到很多第三方库所以会存在同时使用r17c以上的版本或者r17c下的版本 使用gcc编译。

注意:

如果遇到一些奇怪的问题可以换一换NDK版本时候,有时候就解决了,或者更多的使用自己经常使用的版本,比如我用的多是android-ndk-r10e环境来适应gcc编译环境,问题少很多。

  • 本地NDK编译器目录参考

    aarch64-linux-android-4.9
    

源码下载

自行下载pidstat

只编译简单的pidstat mpstat iostat

编译
reach@reach-G250-005-L5-XX:pidstat-master$ ls
common.c  count.c        ioconf.c  iostat    iostat.o            Makefile  mpstat.h  pidstat.c  rd_stats.c        README.md    version.h
common.h  count.h        ioconf.h  iostat.c  librdstats_light.a  mpstat    mpstat.o  pidstat.h  rd_stats.h        sysconfig.h
common.o  count_light.o  ioconf.o  iostat.h  libsyscom.a         mpstat.c  pidstat   pidstat.o  rd_stats_light.o  tools
reach@reach-G250-005-L5-XX:pidstat-master$ pwd
/opt/lvopt/reach_sda/iyf/source/pidstat-master

make

编译脚本
  • 最简单的目录结构

    reach@reach-G250-005-L5-XX:pidstat-master$ ls
    common.c  count.c        ioconf.c  iostat    iostat.o            Makefile  mpstat.h  pidstat.c  rd_stats.c        README.md    version.h
    common.h  count.h        ioconf.h  iostat.c  librdstats_light.a  mpstat    mpstat.o  pidstat.h  rd_stats.h        sysconfig.h
    common.o  count_light.o  ioconf.o  iostat.h  libsyscom.a         mpstat.c  pidstat   pidstat.o  rd_stats_light.o  tools
    reach@reach-G250-005-L5-XX:pidstat-master$ make
    
  • Makefile

#Makefile to build pidstat commands for android (arch-arm64)
SRC_DIR = $(shell pwd)
COMPILE = ${SRC_DIR}/tools/aarch64-linux-android-4.9/bin
CC = ${COMPILE}/aarch64-linux-android-gcc
AR = ${COMPILE}/aarch64-linux-android-ar
NDK_SYSROOT=${SRC_DIR}/tools/ndk
CFLAGS = -g -O2 -Wall -Wstrict-prototypes -pipe -O2 
CFLAGS += --sysroot=${NDK_SYSROOT}
CFLAGS += -pie -fPIE
ALL: pidstat mpstat iostat
commom.o: common.c version.h common.h ioconf.h sysconfig.h$(CC) -o $@ -c $(CFLAGS) $<
ioconf.o: ioconf.c ioconf.h common.h sysconfig.h$(CC) -o $@ -c $(CFLAGS) $<
rd_stats_light.o: rd_stats.c common.h rd_stats.h ioconf.h sysconfig.h$(CC) -o $@ -c $(CFLAGS) $<
count_light.o: count.c common.h rd_stats.h$(CC) -o $@ -c $(CFLAGS) $<
libsyscom.a: common.o ioconf.o$(AR) rvs $@ $?
librdstats_light.a: rd_stats_light.o count_light.o$(AR) rvs $@ $? 
pidstat.o: pidstat.c pidstat.h version.h common.h rd_stats.h count.h$(CC) -o $@ -c $(CFLAGS) $<
mpstat.o: mpstat.c mpstat.h version.h common.h rd_stats.h count.h$(CC) -o $@ -c $(CFLAGS) $<
iostat.o: iostat.c iostat.h version.h common.h ioconf.h sysconfig.h rd_stats.h count.h$(CC) -o $@ -c $(CFLAGS) $<
pidstat: pidstat.o librdstats_light.a libsyscom.a$(CC) pidstat.o libsyscom.a librdstats_light.a -o $@ $(CFLAGS)
mpstat: mpstat.o librdstats_light.a libsyscom.a$(CC) mpstat.o libsyscom.a librdstats_light.a -o $@ $(CFLAGS)
iostat: iostat.o librdstats_light.a libsyscom.a$(CC) iostat.o libsyscom.a librdstats_light.a -o $@ $(CFLAGS)
.PHONY: clean
clean:rm -f *.o *.a pidstat mpstat iostat

备份:

G:\tools\android\pidstat-ok\pidstat

问题

使用

可以在Android Studio 上面演示,暂时没有完全独立的demo,用得人多再补吧,先编译

技术支持

按照如上提供的步骤,如果还存在问题,可以找我获取可以使用的so库、源码、脚本、带环境及源码的虚拟机。应该有地方可以获取名片, promptpe 我喜欢这名字,以后全网都使用这个名字,全网都可以搜索到我 。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/178927.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python避坑指南(更新中)

os.path.join 避免连续的/&#xff0c;看示例即清楚&#xff0c;最好的避免方法是字符串首末都不要加’/&#xff1a; join用法 用join前面的符号将参数数组里面的字符串连接起来&#xff0c;注意join只有一个参数

tlais智能学习辅助系统-修改部门功能实现

学习黑马程序员的JavaWeb课程&#xff0c;自己写的部门信息修改部分程序 控制层&#xff1a; //DeptController.java /** * 根据ID查询部门信息 * param id * return */ GetMapping("/{id}") public Result select(PathVariable Integer id){log.info("查询id…

电子学会C/C++编程等级考试2021年03月(二级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:石头剪刀布 石头剪刀布是常见的猜拳游戏。石头胜剪刀,剪刀胜布,布胜石头。如果两个人出拳一样,则不分胜负。 一天,小A和小B正好在玩石头剪刀布。已知他们的出拳都是有周期性规律的,比如:“石头-布-石头-剪刀-石头-布-石头…

整数的补码转换(以[+, -]7为例)

要找到 -7 的二进制补码&#xff0c;我们可以按照以下步骤进行&#xff1a; 写出正数的二进制表示: 首先&#xff0c;写出 7 的二进制表示。假设我们在一个 8 位的系统中工作&#xff08;使用 8 位二进制数&#xff09;&#xff0c;那么 7 的二进制表示是 0000 0111。 取反&am…

Linux shell编程学习笔记31:alias 和 unalias 操作 命令别名

目录 0 前言1 定义别名2 查看别名 2.1 查看所有别名2.2 查看某个别名 2.2.1 alias 别名2.2.2 alias | grep 别名字符串2.2.3 使用 CtrlAltE 组合键3 unalias&#xff1a;删除别名4 如何执行命令本身而非别名 4.1 方法1&#xff1a;使用 CtrlAltE 组合键 && unalias4…

电动汽车的400V和800V充电技术

文章目录 400V充电和800V充电对比电动汽车400V充电和800V充电速度对比电动汽车400V充电技术电动汽车400V充电系统电动汽车800V充电系统电动汽车800V充电技术 400V充电和800V充电对比 400V充电和800V充电是指电动汽车充电系统的不同电压等级。这两种充电方式的主要区别在于充电…

使用 sync.Cond 来协调并发 goroutine 的访问共享资源

关注公众号【爱发白日梦的后端】分享技术干货、读书笔记、开源项目、实战经验、高效开发工具等&#xff0c;您的关注将是我的更新动力&#xff01; 使用 sync.Cond 解决并发访问共享资源问题 在并发编程中&#xff0c;当多个 goroutine 需要访问共享资源时&#xff0c;我们需要…

Redis 主库挂了,如何不间断服务?

目录 1、哨兵机制的基本流程 2、主观下线和客观下线 3、如何选定新的主库&#xff1f; 总结 // 你只管前行&#xff0c;剩下的交给时间 在 reids 主从库集群模式下&#xff0c;如果从库发生故障了&#xff0c;客户端可以继续向主库或其他从库发送请求&#xff0c;进行相关的…

前端入门(三)Vue组件化编程、脚手架、插槽插件、存储、vuex、组件事件、动画、代理

文章目录 Vue 组件化编程 - .vue文件非单文件组件组件的注意点组件嵌套Vue实例对象和VueComponent实例对象Js对象原型与原型链Vue与VueComponent的重要内置关系 应用单文件组件构建 Vue脚手架 - vue.cli项目文件结构组件相关高级属性引用名 - ref数据接入 - props混入 - mixin …

java基础-IO

1、基础概念 1.1、文件(File) 文件的读写可以说是开发中必不可少的部分&#xff0c;因为系统会存在大量处理设备上的数据&#xff0c;这里的设备指硬盘&#xff0c;内存&#xff0c;键盘录入&#xff0c;网络传输等。当然这里需要考虑的问题不仅仅是实现&#xff0c;还包括同步…

Linux系统编程 day06 进程间通信

进程间通信 1. 进程间通信的概念2. 匿名管道pipe3. 命名管道FIFO4. 内存映射区 1. 进程间通信的概念 在Linux的环境下&#xff0c;进程地址空间是相互独立的&#xff0c;每个进程有着各自不同的用户地址空间。一个进程不能访问另一个进程中的内容&#xff0c;要进行数据交换必…

STM32F103C8T6第7天:

1. 智能小车&#xff1a;让小车动起来&#xff08;360.64&#xff09; 硬件接线 B-2A – PB0B-1A – PB1A-1B – PB2A-1A – PB10其余接线参考上官一号小车项目。 cubemx配置 代码&#xff08;28.smartCar_project1/MDK-ARM&#xff09; 2. 智能小车&#xff1a;串口控制小…

简要介绍Spring原生框架与Spring是轻量级框架的原因

&#x1f609;&#x1f609; 学习交流群&#xff1a; ✅✅1&#xff1a;这是孙哥suns给大家的福利&#xff01; ✨✨2&#xff1a;我们免费分享Netty、Dubbo、k8s、Mybatis、Spring...应用和源码级别的视频资料 &#x1f96d;&#x1f96d;3&#xff1a;QQ群&#xff1a;583783…

别再让假的fiddler教程毒害你了,来看这套最全最新的fiddler全工具讲解

fiddler界面工具栏介绍 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; &#xff08;1&#xff09;WinConfig&#xff1a;windows 使用了一种叫做“AppContainer”的隔离技术&#xff0c;使得一些流量无法正常捕获&#xff0c;在 fiddler中点击 WinConfig…

Vue指令之v-html

在Vue中有很多特殊的标签属性&#xff0c;这些属性一般以’v’开头&#xff0c;用于在标签中实现特殊的功能。 例如&#xff0c;当Vue实例的data是一个inner html&#xff0c;我们想在网页上渲染这部分html&#xff0c;如果依然使用之前的{{ variable }}&#xff0c;则只会将i…

单片机复位电路

有时候我们的代码会跑飞,这个时候基本上是一切推到重来.”推倒重来”在计算机术语上称为复位.复位需要硬件的支持,复位电路就是在单片机的复位管脚上产生一个信号&#xff0c;俗称复位信号.这个信号需要持续一定的时间,单片机收到该信号之后就会复位,从头执行。 复位原理: 那么…

【视觉SLAM十四讲学习笔记】第三讲——四元数

专栏系列文章如下&#xff1a; 【视觉SLAM十四讲学习笔记】第一讲——SLAM介绍 【视觉SLAM十四讲学习笔记】第二讲——初识SLAM 【视觉SLAM十四讲学习笔记】第三讲——旋转矩阵 【视觉SLAM十四讲学习笔记】第三讲——Eigen库 【视觉SLAM十四讲学习笔记】第三讲——旋转向量和欧…

anaconda换源安装pytorch(附带bug解决办法)

1.安装anaconda 如何安装anaconda可以看这篇文章:如何安装anaconda 2.换源安装pytorch: 首先进入到pytorch官网&#xff0c;选对好参数之后复制命令进入到anaconda prompt即可: 然后进入自己的环境之后输入该命令(即conda install …)&#xff0c;则可以进行下载。下载完成…

C 标准库 - <stdlib.h>和<string.h>详解

目录 C 标准库 - 简介 库变量 库宏 库函数 实例 C 标准库 - 简介 库变量 库宏 库函数 实例 C 标准库 - <stdlib.h> 简介 C 标准库中的 <stdlib.h> 是 C 标准库的头文件之一&#xff0c;包含了一些常用的函数和类型&#xff0c;主要用于内存管理、字…

【DevOps】SonarQube 指标解读

SonarQube 指标解读 1.BUG 评级计算方法&#xff08;可靠性&#xff09;2.漏洞评级计算方法&#xff08;安全性&#xff09;3.债务和坏味道4.覆盖率4.1 代码覆盖率4.2 分支覆盖率4.3 单元测试覆盖率 5.重复 1.BUG 评级计算方法&#xff08;可靠性&#xff09; ✅ A&#xff1a…