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

你可能感兴趣的:(原生移植,鸿蒙开发HarmonyOS,rk3588从入门到精通,android,jni,ndk,android,pidstat,android,mpstat,android,iostat)