rust 交叉编译 -- mac下、windows下 编译到 Linux目标环境

交叉编译

Windows 下编译到 arm64-linux

需要下载 arm 的编译 toolchain,有不同的选择:使用aarch64-none-linux-gnu 或者 aarch64-none-linux-musl。

这里使用 aarch64-none-linux-gnu

  • 安装好rust,可以正常编译
  • 下载 windows 下的 arm-gnu-toolchain,并安装,配置环境变量 aarch64-none-linux-gnu/bin
    地址:https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads, 
    选择 AArch64 GNU/Linux target (aarch64-none-linux-gnu)
    
    安装,后配置环境变量。
    在终端中执行 aarch64-none-linux-gnu-gcc -v 正常输出,证明配置完成。
    
  • 配置 ~/.cargo/config.toml, 注意不是项目中的 Cargo.toml
    [target.aarch64-unknown-linux-gnu]
    linker = "aarch64-none-linux-gnu-gcc"
    
  • 安装 target
    执行 rustup target add aarch64-unknown-linux-gnu
    
  • 尝试编译
    执行cargo build --target=aarch64-unknown-linux-gnu
    
  • glibc 版本问题
    编译后,在目标机器上没有对应的glibc版本,使用静态链接,在 ~/.cargo/config.toml 修改如下
    [target.aarch64-unknown-linux-gnu]
    linker = "aarch64-none-linux-gnu-gcc"
    rustflags = ["-C", "target-feature=+crt-static"]
    

macOS下编译到 arm64-linux

需要下载 arm 的编译 toolchain,有几种选择。

  • 安装好rust,可以正常编译
  • 下载 macOS下的 toolchain,并安装,配置环境变量 aarch64-none-linux-gnu/bin
    地址:https://github.com/messense/homebrew-macos-cross-toolchains/releases
    本机是 x86 intel处理器,目标机器是 aarch64-linux ,使用 gnu libc
    选择 aarch64-unknown-linux-gnu-x86_64-darwin.tar.gz 包进行下载。
    
    解压后,配置 macOS 环境变量。
    在终端中执行 aarch64-unknown-linux-gnu-gcc -v 正常输出,证明配置完成。
    
  • 配置 ~/.cargo/config.toml, 注意不是项目中的 Cargo.toml
    [target.aarch64-unknown-linux-gnu]
    linker = "aarch64-unknown-linux-gnu-gcc"
    
  • 安装 target
    执行 rustup target add aarch64-unknown-linux-gnu
    
  • 尝试编译
    执行cargo build --target=aarch64-unknown-linux-gnu
posted @ 2023-09-06 20:23  bpzj  阅读(923)  评论(0)    收藏  举报