在windows上交叉编译 rust x86_64-unknown-linux-musl

安装 msys2

https://www.msys2.org/

A.设置清华源

1
sed -i "s#https\?://mirror.msys2.org/#https://mirrors.tuna.tsinghua.edu.cn/msys2/#g" /etc/pacman.d/mirrorlist*

B.安装 mingw-w64

1
pacman -S mingw-w64-ucrt-x86_64-toolchain

C.添加环境变量
找到 msys2 安装位置下

1
ucrt64/bin

安装 cross-rs

https://github.com/cross-rs/cross

1
cargo install cross --git https://github.com/cross-rs/cross

也可以直接下载 exe 二进制文件并添加到环境变量中

安装 Docker并启动

https://www.docker.com/

配置 rust

1
2
rustup toolchain install stable-x86_64-pc-windows-gnu
rustup target add x86_64-pc-windows-gnu

构建

1
cross build --target x86_64-unknown-linux-musl --release

其他命令

1
2
rustup toolchain list
rustup target list

Musl libc 和 glic 区别

Musl libc

Musl libc 是一个轻量级、快速且安全的 C 库,专注于提供基本的 C 函数和系统调用。
它被设计为适用于嵌入式系统、轻量级容器和小型 Linux 发行版等环境,以减小可执行文件的大小并提高性能。
静态链接的应用程序使用 musl 库可以更小且更独立。
musl 倾向于遵循标准规范,但有时可能在标准实现和扩展之间进行权衡。
由于其精简和专注的设计,与 glibc 相比,musl 提供了更少的功能,但在特定情况下性能更高。

glibc

glibc 是 GNU C Library 的缩写,是 Linux 系统上最常用的 C 库之一。
它提供了广泛的标准 C 函数和系统调用,适用于各种不同的应用场景。
glibc 功能强大,支持多种不同的硬件和操作系统特性,但由于其广泛性,导致了一些额外的复杂性和资源开销。
静态链接的应用程序通常会比较大,因为它们包含了 glibc 的一部分代码。

编译器和运行环境区别

ucrt

ucrt: Universal C Runtime,是微软的C运行时库,用于支持Windows操作系统上的C语言应用程序。

msvcrt

Microsoft Visual C Runtime,也是微软的C运行时库,用于支持使用Microsoft Visual Studio开发的C和C++应用程序。

glic Library

GNU C Library,是Linux系统上的C库,提供了系统调用和基本的C函数,用于支持Linux上的C和C++应用程序。

clang

Clang是一个开源的C、C++、Objective-C和Objective-C++编译器前端,它使用LLVM作为后端来生成机器码。

LLVM

LLVM是一个编译器基础设施项目,它包括一系列编译器相关的工具和库,用于优化和生成机器码。

总的来说,ucrt和msvcrt是微软Windows平台上的C运行时库,glibc是Linux平台上的C库,而clang是一个跨平台的编译器前端,而llvm是一个编译器基础设施项目,被用于创建各种类型的编译器。