1.为什么要在linux下面编译ARM程序?

ARM架构复杂,而且型号众多,一些低端设备无法编译软件
使用linux工具链齐全,交叉编译ARM程序效率高

 

 

2.确定ARM架构

root@XiaoQiang:~# ldd --version
musl libc (arm)
Version 1.1.19
Dynamic Program Loader
Usage: ldd [options] [--] pathname

查看程序依赖

root@XiaoQiang:~# ldd /bin/sh
	/lib/ld-musl-arm.so.1 (0x54ba6000)
	librpc.so => /lib/librpc.so (0x76f5e000)
	libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x76f43000)
	libc.so => /lib/ld-musl-arm.so.1 (0x54ba6000)

通过上面命令显示,本系统是arm平台由musl编译的

 

3. 设置C编译环境

apt-get install build-essential

其他就不列出了

 

4. 设置ARM交叉编译环境

 

4.1 使用第三方打包好的程序(非常耗时)

  wget https://github.com/richfelker/musl-cross-make/archive/master.tar.gz 
 tar xzf master.tar.gz 
 cd musl-cross-make-master

 

4.1.1 调整配置选项

修改配置模板config.mak.dist为config.mak ,并设置以下选项

TARGET = arm-linux-musleabi
OUTPUT = /usr/local 
MUSL_VER = 1.1.19

 

4.1.2 编译安装

 make
 make install

 

4.1.3 测试musleabi版本gcc

arm-linux-musleabi-gcc --version

 

4.2 使用官方musl交叉编译软件(推荐)

 

4.2.1到官方下载软件 https://musl.cc/

比如: https://musl.cc/arm-linux-musleabi-cross.tgz
https://musl.cc/armv7l-linux-musleabihf-cross.tgz

 

4.2.2 解压并添加环境变量

将其解压,并将bin目录添加至环境变量(例如 ~/.profile 文件)

 export PATH="$HOME/tool/arm-linux-musleabi-cross/bin:$PATH"
 export PATH="$HOME/tool/armv7l-linux-musleabihf-cross/bin:$PATH"

 

4.2.3 验证是否添加正确

source ~/.profile
 arm-linux-musleabi-gcc -v
 armv7l-linux-musleabihf-gcc -v

 

4.3使用musl官方docker镜像

上面太复杂,不想折腾,可以直接使用docker镜像

docker pull muslcc/i686:arm-linux-musleabi
docker pull muslcc/i686:armv7l-linux-musleabihf

https://hub.docker.com/r/muslcc/i686
https://hub.docker.com/r/muslcc/x86_64

 

5. musleabi编译文件测试

arm-linux-musleabi-gcc hello.c -o hello

参考文章:
https://itnext.io/cross-compile-rust-programs-to-run-on-turris-omnia-e592b555e2aa
https://zhuanlan.zhihu.com/p/92330365

 转自:https://www.livelu.com/202007384.html