[Rust] ARMv8にクロスコンパイル
ARMv8 で動くバイナリを Rust で生成するメモです.
環境
host
- Debian 10.9 (WSL2) on Win10 20H2
- Rust 1.51 stable-x86_64-unknown-linux-gnu
target
- ARMv8 (aarch64-unknown-linux-musl)
作業手順
Rust インストールが完了しており, rustup
や rustc
が使えるものとします.
linker をインストール
sudo apt install gcc-aarch64-linux-gnu
rust target をインストール
なるべく静的リンクしたかったので musl 版をインストールしました.
rustup target add aarch64-unknown-linux-musl
コンパイル
rustc を直接使うならば, linker を忘れずに指定します.
rustc -C linker=aarch64-linux-gnu-gcc --target=aarch64-unknown-linux-musl hello_world.rs
cargo を使う場合, プロジェクトのルートディレクトリまたはホームディレクトリに .cargo/config.toml
というファイルを作成し,
そこで linker を指定します.
なおビルドのデフォルトターゲットとして設定する場合には, 最初の2行のコメントアウトを外してください.
デフォルト設定するのならばプロジェクトディレクトリに, そうでなければホームディレクトリに設定するのが良さそうです.
# [build]
# target = "aarch64-unknown-linux-musl"
[target.aarch64-unknown-linux-musl]
linker = "aarch64-linux-gnu-gcc"
そして target を指定してビルドします.
cargo build --target aarch64-unknown-linux-musl