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 我喜欢这名字,以后全网都使用这个名字,全网都可以搜索到我 。