鴨川のはりねずみ

[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 インストールが完了しており, rustuprustc が使えるものとします.

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

参考文献