Rust 交叉编译环境搭建

一、安装Rust

1. 官方安装

$ curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh

安装时可能存在流量不稳定导致安装失败,可以更换源,使用国内的crates.io镜像。

2. 更换Rust镜像源进行安装

(1) 更换Rustup镜像源

         修改~/.bashrc, 追加如下内容

export RUSTUP_DIST_SERVER="https://rsproxy.cn"
export RUSTUP_UPDATE_ROOT="https://rsproxy.cn/rustup"

(2) 更换crates.io镜像源

        在~/.cargo/目录下新建 config.toml  (cargo 1.38及以前的版本使用文件名config)

[source.crates-io]
registry = "https://github.com/rust-lang/crates.io-index"
replace-with = "ustc" #或rustcc、sjtu、tuna

# 根据replace-with配置的镜像源,以下只需配置一个对应的源即可
# 中国科大
[source.ustc]
registry = "git://mirrors.ustc.edu.cn/crates.io-index"

# rustcc社区
[source.rustcc]
registry = "https://code.aliyun.com/rustcc/crates.io-index.git"

# 上海交通大学
[source.sjtu]
registry = "https://mirrors.sjtug.sjtu.edu.cn/git/crates.io-index"

# 清华大学
[source.tuna]
registry = "https://mirrors.tuna.tsinghua.edu.cn/git/crates.io-index.git"

(3)重新执行安装脚本

$ curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh

 

二、交叉编译ARM目标

1. 将ARM添加为Rust目标平台

$ rustup target list #可以查看所有可添加的目标平台
$ rustup target add arm-unknown-linux-gnueabihf #本例添加 arm-unknown-linux-gnueabihf

2. 在 ~/.cargo/config.toml 中指定ARM目标的链接器

[target.arm-unknown-linux-gnueabihf]
linker = "arm-none-linux-gnueabihf-gcc"
#cargo build 需加 --target
arm-unknown-linux-gnueabihf

[build]
target = "arm-unknown-linux-gnueabihf"
#这样cargo build默认就是构建
arm-unknown-linux-gnueabihf

[alias]
build_arm = "build --target arm-unknown-linux-gnueabihf"
#这样设置别名后可以直接 cargo build_arm 来缩短构建命令

 

三、HelloWorld示例

1. 使用cargo创建项目

$ cargo new rust_helloworld --bin

   cargo将创建项目目录rust_helloworld, 其下包含Cargo.toml和src/main.rs

2. 交叉编译ARM目标文件

$ cargo build --release  #因在config.toml中配置了[build] target为arm-unknonw-linux-guneabihf,所以默认生成arm目标
#或者
$ cargo build --release  --target arm-unknown-linux-gnueabihf

 cargo 将生成目标目录target,bin文件存放在 target/arm-unknown-linux-gnueabihf/release/

3. 编译本地架构的目标文件

$ cargo build --release  --target x86_64-unknown-linux-gnu  #本例PC为x64架构

 

posted @ 2024-06-19 20:01  云的边界  阅读(631)  评论(0)    收藏  举报