前言
最近宇润在玩几年前朋友送我的树莓派,正好又在玩 Rust,所以我就想试试在电脑上交叉编译出 arm 架构的程序。
此教程同样适用于包括但不限于:Windows、Linux、MacOS、单片机等。
为什么用 musl?
linux 编译的程序主要有两种依赖:gnu 和 musl。
- gnu 编译出的程序,依赖系统安装的 glibc 版本
- musl 编译出的程序是完全静态的,也就是不依赖系统的 lib,兼容性更好,但编译出的文件会略大
步骤
安装 Rust 平台库
查看所有支持的平台:
网页:https://doc.rust-lang.org/rus...
命令:rustup target list
安装 Rust 平台库:
rustup target add arm-unknown-linux-gnueabi
arm-unknown-linux-gnueabi
替换为你要编译到的平台
安装编译工具链
这一步我曾经想依靠 apt 来安装,但没有 arm 平台的 musl 工具和 lib,只能自己编译。
我们使用这个项目:https://github.com/richfelker/musl-cross-make
创建 config.mak
文件,内容:
TARGET = arm-linux-musleabi # 目标平台
OUTPUT = /data/cross/armv6 # 编译安装位置
COMMON_CONFIG += CFLAGS="-g0 -Os" CXXFLAGS="-g0 -Os" LDFLAGS="-s"
GCC_CONFIG += --with-arch=armv6 --with-mode=arm --with-fpu=vfp # 编译不同平台的参数不同,注意修改
修改 Makefile
文件,把 MUSL_VER
配置值改为 1.1.24
。因为默认的 1.2
版本,会导致你在编译时候报错,Rust 官方依赖的是 1.1
。(这一条不排除未来 Rust 会升级依赖)
执行编译安装命令:make install
时间可能会很漫长,需要耐心等待。
最后将 /data/cross/armv6/bin
目录(同 config.mak
配置),加到环境变量。
编辑 ~/.bashrc
文件,最后一行加入:
export PATH="$PATH:/data/cross/armv6/bin"
执行命令:source ~/.bashrc
编译项目
cargo build --target arm-unknown-linux-musleabi --release
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。