2021-11-14 15:52:46 +08:00

89 lines
2.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: "Rust 笔记"
date: 2021-08-29T15:02:13+08:00
lastmod: 2021-08-29T15:02:13+08:00
keywords: []
tags: []
categories: ["dev/ops"]
---
## 安装 rust
- 安装 rustup参考官网
```bash
export RUST_UPDATE_ROOT=https://mirrors.tuna.tsinghua.edu.cn/rustup
export RUSTUP_DIST_SERVER=https://mirrors.tuna.tsinghua.edu.cn/rustup
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# 按照提示,一直 default 即可
```
- 配置 rustup、toolchain 和 target 更新源
```bash
cat >> /etc/profile.d/rustup.sh <<-EOF
export RUSTUP_DIST_SERVER=https://mirrors.tuna.tsinghua.edu.cn/rustup
EOF
```
- 配置 crate 源
```bash
cat >> ~/.cargo/config <<-EOF
[source.crates-io]
replace-with = 'tuna'
[source.tuna]
registry = "https://mirrors.tuna.tsinghua.edu.cn/git/crates.io-index.git"
EOF
```
## 交叉编译
### 树梅派 Alpine armv7/armhf
- 下载交叉编译工具
```bash
curl -LO https://musl.cc/armv7l-linux-musleabihf-cross.tgz
tar zxf armv7l-linux-musleabihf-cross.tgz -C /opt/
export PATH=/opt/armv7l-linux-musleabihf-cross/bin/:$PATH
```
- 配置 target
```bash
rustup target add armv7-unknown-linux-musleabihf
cat >> ~/.cargo/config <<-EOF
[target.armv7-unknown-linux-musleabihf]
linker = "armv7l-linux-musleabihf-ld"
EOF
```
- 编译
```bash
# 操作系统如果是 armv7则需指定该 cflag 来禁用 fpu
export CFLAGS='-mfpu=neon'
export CC=armv7l-linux-musleabihf-gcc
cargo build --target armv7-unknown-linux-musleabihf --release
armv7l-linux-musleabihf-strip target/armv7-unknown-linux-musleabihf/release/{目标二进制文件}
```
### 树梅派 Alpine aarch64
- 下载交叉编译工具
```bash
curl -LO https://musl.cc/aarch64-linux-musl-cross.tgz
tar zxf aarch64-linux-musl-cross.tgz -C /opt/
export PATH=/opt/aarch64-linux-musl-cross/bin/:$PATH
```
- 配置 target
```bash
rustup target add aarch64-unknown-linux-musl
cat >> ~/.cargo/config <<-EOF
[target.aarch64-unknown-linux-musl]
linker = "aarch64-linux-musl-ld"
EOF
```
- 编译
```bash
export CC=aarch64-linux-musl-gcc
cargo build --target aarch64-unknown-linux-musl --release
aarch64-linux-musl-strip target/aarch64-unknown-linux-musl/release/{目标二进制文件}
```