我最近买了一个 Raspberry PI 2,我想在上面运行一个 Rust 程序。
是否有指南/说明如何在 Raspberry PI 2 上交叉编译 Rust 程序?我听说过在 RPi 或 Arduino 上运行 Rust,尽管不是最近。
我想要一个Hello World
在 Raspberry Pi 2 上运行的等效 Rust 程序。它不必是字面意义上的 Hello World 程序,只需具有类似的低复杂度即可。
我最近买了一个 Raspberry PI 2,我想在上面运行一个 Rust 程序。
是否有指南/说明如何在 Raspberry PI 2 上交叉编译 Rust 程序?我听说过在 RPi 或 Arduino 上运行 Rust,尽管不是最近。
我想要一个Hello World
在 Raspberry Pi 2 上运行的等效 Rust 程序。它不必是字面意义上的 Hello World 程序,只需具有类似的低复杂度即可。
我们现在已经生锈了。
$ rustup target add arm-unknown-linux-gnueabihf
$ sudo apt-get install gcc-arm-linux-gnueabihf
$ echo '[target.arm-unknown-linux-gnueabihf]' >> ~/.cargo/config
$ echo 'linker = "arm-linux-gnueabihf-gcc"' >> ~/.cargo/config
$ cd <project dir>
$ cargo build --target=arm-unknown-linux-gnueabihf
Rust 编译器不作为 Raspberry Pi 的交叉编译器分发,因此需要使用 rpi 开发工具作为交叉编译器进行编译。
获取 rpi 开发工具 -git clone https://github.com/raspberrypi/tools.git ~/pi-tools
从 mozilla git repo 获取 rust 编译器并将 rpi 工具添加到路径export PATH=~/pi-tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin:$PATH
在你家中寻找 rusty-pi 目录./configure --target=arm-unknown-linux-gnueabihf --prefix=$HOME/rusty-pi && make && make install
考虑到 helloworld.rs ->% ~/pi-rust/bin/rustc --target=arm-unknown-linux-gnueabihf -C linker=arm-linux-gnueabihf-g++ helloworld.rs
它将产生一个可执行文件。
@kazhik 的答案适用于 Raspberry Pi 2s 和 3s(基于 ARMv7/8),但不适用于 Raspberry Pi 1s 或 Zeros(基于 ARMv6)。
问题是 Debian/Ubuntu 的armhf
端口(以及它们的gcc-arm-linux-gnueabihf
包/编译器/工具链)的目标 >= ARMv7。
幸运的是,rustup 的gcc-arm-linux-gnueabihf
目标 >= ARMv6(具有硬件浮点,所有 Raspberry Pi 都支持),所以只需要正确的链接器。Raspberry Pi 基金会在其工具库中提供了其中之一。
综上所述,以下步骤可用于交叉编译适用于所有 Raspberry Pi 的 Rust 二进制文件:
$ rustup target add arm-unknown-linux-gnueabihf
$ git clone --depth=1 https://github.com/raspberrypi/tools raspberrypi-tools
$ echo "[target.arm-unknown-linux-gnueabihf]" >> ~/.cargo/config
$ echo "linker = \"$(pwd)/raspberrypi-tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-gcc\"" >> ~/.cargo/config
测试交叉编译器(假设 Pi 正在运行并且可以使用默认raspberrypi
主机名访问):
cpick@devhost: $ cargo new --bin rpi-test
cpick@devhost: $ cd rpi-test
cpick@devhost: $ cargo build --target=arm-unknown-linux-gnueabihf
cpick@devhost: $ scp target/arm-unknown-linux-gnueabihf/debug/rpi-test pi@raspberrypi:
cpick@devhost: $ ssh pi@raspberrypi
pi@raspberrypi: $ ./rpi-test
Hello, world!