rust windows 交叉编译_macOS交叉编译rust代码到树莓派

笔者一直想搞个树莓派来玩,由于囊中羞涩一直没舍得买,加上自己一直是做 Java 开发,树莓派的发挥也不大,就一直处于犹豫徘徊当中。直到这次,实在是忍不住想试试 Rust 嵌入式开发,弄几个传感器搞搞物联网方面的学习,于是狠心从某宝购买了一块4B 的板子。

下单后,就一直等待卖家发货,不停刷新着物流信息,经过两天,板子终于到我手中了。不管三七二十一,先组装好,然后跑个 Hello world 再说。

因为笔者不想直接在板子上搭开发环境,所以就要选择交叉编译,在本地电脑上编译好,再上传到板子里面去,而网上的交叉编译教程基本上都是 Linux 的,虽然跟 macOS 差别不是很大,但笔者还是觉得应该总结一下,并把这个过程分享出来。

有些朋友可能对交叉编译并不是很理解,这里笔者简述一下:当需要在 Windows 系统下编译 Linux 、 Android 或者 macOS 平台的目标文件时,就需要用到交叉编译,反过来说在 Linux 系统要编译 Windows 平台的应用,同样是需要用到交叉编译。交叉编译也不仅仅是指跨操作系统,还跟 cpu 架构有关。例如笔者情况就是在 macOS x86_64 的架构上将目标文件编译成 Linux arm7 架构可以运行的。

先来看一看笔者的板子

再往下就是整个交叉编译的过程了。

1、查看树莓派架构

uname -m

输出 armv7l 说明是 arm7 处理器,因此我们在 macOS 上要安装 arm7 相关编译器。

2、安装 arm7 架构的 gcc

# 下载

wget https://mac.musl.cc/armv7l-linux-musleabihf-cross.tgz

# 解压到制定目录

tar zxvf armv7l-linux-musleabihf-cross.tgz -C $HOME

# 配置环境变量

vim ~/.profile

export PATH="$PATH:$HOME/armv7l-linux-musleabihf-cross/bin"

source ~/.profile

# 测试安装结果

armv7l-linux-musleabihf-gcc -v

注意:$HOME为变量(实际对应当前用户目录),改成你需要的路径就可以了。

3、安装 rust 对应的 target

rustup target add armv7-unknown-linux-musleabihf

使用 rustup target add 命令添加目标平台,简单方便。

4、创建 rust 项目

cargo new hellopi --bin

5、在 rust 项目下配置 .cargo/config 文件为以下内容

[target.armv7-unknown-linux-musleabihf]

linker="armv7l-linux-musleabihf-gcc"

6、交叉编译

cargo run --target=armv7-unknown-linux-musleabihf

# 或者

cargo run --target=armv7-unknown-linux-musleabihf --release

编译后在 ./target 目录下会生成一个目标平台文件夹 armv7-unknown-linux-musleabihf 而编译结果就在这个文件夹对应的 debug/release 目录下。

7、上传目标文件到树莓派

scp ./target/armv7-unknown-linux-musleabihf/release/hellopi [email protected]:/home/pi

8、在树莓派上执行目标文件

# 使用 ssh 命令登录到树莓派,在 /home/pi 中执行目标文件

./hellopi

# 输出

Hello, world!

你可能感兴趣的:(rust,windows,交叉编译)