Rust musl 交叉编译教程

前言
此教程同样适用于包括但不限于:Windows、Linux、MacOS、单片机等。

为什么用 musl?
linux 编译的程序主要有两种依赖:gnu 和 musl。
gnu 编译出的程序,依赖系统安装的 glibc 版本
musl 编译出的程序是完全静态的,也就是不依赖系统的 lib,兼容性更好,但编译出的文件会略大

步骤
安装 Rust 平台库
查看所有支持的平台:

网页:https://doc.rust-lang.org/rustc/platform-support.html

命令:rustup target list

安装 Rust 平台库:

rustup target add x86_64-unknown-linux-musl

x86_64-unknown-linux-musl 替换为你要编译到的平台
安装编译工具链
这一步我曾经想依靠 apt 来安装,但没有 arm 平台的 musl 工具和 lib,只能自己编译。
我们使用这个项目:https://github.com/richfelker/musl-cross-make

创建 config.mak 文件,内容:

TARGET = x86_64-linux-musl

# 目标平台

OUTPUT = /usr/local/muslcross

# 编译安装位置

COMMON_CONFIG += CFLAGS="-g0 -Os" CXXFLAGS="-g0 -Os" LDFLAGS="-s"GCC_CONFIG += --with-arch=x86_64 --with-mode=linux --with-fpu=vfp

# 编译不同平台的参数不同,注意修改
修改 Makefile 文件,把 MUSL_VER 配置值改为 1.1.24。因为默认的 1.2 版本,会导致你在编译时候报错,Rust 官方依赖的是 1.1。(这一条不排除未来 Rust 会升级依赖)

执行编译安装命令:

make install

然后添加配置文件。在刚才建立的工程目录 hello 下

mkdir .cargo && cd .cargo && touch config.toml

添加下面的配置

[build]
target = "x86_64-unknown-linux-musl"

[target.x86_64-unknown-linux-musl]
linker = "x86_64-linux-musl-gcc"

时间可能会很漫长,需要耐心等待。
最后将 /usr/local/muslcross/bin 目录(同 config.mak 配置),加到环境变量。

编辑 ~/.bashrc 文件,最后一行加入:

export PATH=$PATH:/usr/local/muslcross/bin

执行命令:

source ~/.bashrc

编译项目

cargo build --target x86_64-unknown-linux-musl --release
点赞