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