Rust-Cross-Compiling unter macOS

Unter Rust ist das crosscompilen, also das Erstellen von Binaries für andere Architekturen relativ einfach. Im Falle des Raspberry Pi 5, muss als Erstes die passende Zielarchitektur installiert werden:

rustup target add aarch64-unknown-linux-gnu

Da Rusts Standardbibliothek std auf C-Bibliotheken wie libc aufbaut, muss gegen das Zielsystem gelinkt werden; in diesem Fall das Linux auf dem Raspberry Pi. Dafür wird die entsprechende Toolchain benötigt:

brew tap messense/macos-cross-toolchains
brew install aarch64-unknown-linux-gnu

Nun muss das bestehende Rust-Projekt noch modifiziert werden. Dazu muss eine Cargo-Konfiguration unter .cargo/config.toml erstellt werden:

[target.aarch64-unknown-linux-gnu]
linker = "aarch64-linux-gnu-gcc"

Anschließend kann das Release erzeugt werden:

cargo build --release --target aarch64-unknown-linux-gnu

Nach dem Buildprozess findet sich das Kompilat im Ordner target/aarch64-unknown-linux-gnu/release/ und kann auf dem Raspberry Pi ausgeführt werden.

Probleme mit dem Rust-Linker unter Windows

Die Installation der Programmiersprache Rust ist in vielen Fällen ziemlich unkompliziert. Trotzdem trat nach einer Installation unter Windows folgender Fehler auf:

error: linker `link.exe` not found
note: The system cannot find the file specified. (os error 2)
note: the msvc targets depend on the msvc linker but `link.exe` was not found
note: please ensure that VS 2013, VS 2015 or VS 2017 was installed with the Visual C++ option
error: aborting due to previous error
error: Could not compile `console`.

Gesucht wird hier nach einem Linker aus einem Visual Studio-Paket. Wer dieses nicht nutzen möchte, kann stattdessen die Toolchain umkonfigurieren:

rustup toolchain install stable-x86_64-pc-windows-gnu
rustup default stable-x86_64-pc-windows-gnu

Damit wird nun eine freie Variante eines Linkers aus dem GNU-Projekt genutzt und die Rust-Applikation sollte kompilieren und erfolgreich gelinkt werden können.