linux平台交叉编译ARM程序

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

4 条评论

  1. 无名

    你这个主题好简洁啊~是你修改过的handsome吗?可以分享吗?

    1. 老刘
      @无名

      @无名
      开源版本 https://github.com/Lengsir/handsome

  2. 心灵博客

    在你这能学到不少技术

  3. 籽夏

    cloudflare反代节点如何获取真实ip

此处评论已关闭