⚙️
Rustで記述したコードをJetson Nano用にクロスコンパイルする方法
はじめに
Rustのクロスコンパイルについて備忘録
開発環境
開発側
※下記すべてWindows11でWSLを使って構築しています。
- Ubuntu 20.4(amd環境)
- Docker 20.10.19
- cargo 1.70.0
実機
- Jetson Nano B01(ARM環境)
- 実行することだけを想定しているのでRustはインストールしていない
手順
Hello worldをクロスコンパイルしてJetson上で実行するところまでを対象とする。
- Cargoを使ってcrossクレートを導入する
cargo install cross
※cross:コンテナを使っていい感じにクロスコンパイルしてくれるツール
- Rustでプロジェクトを作成する
cargo new <project_name>
作成した段階で実行するとHello, World!を出力されるはず。
cd <project_name>
cargo run
- クロスコンパイルする
jetson nanoはアーキテクチャとしてARMを利用しているため、WindowsPC(amd)でそのままビルドしてしまうと実行ファイルを使いまわせない。
そこでアーキテクチャ間のクロスコンパイルを行う。
cross build --target aarch64-unknown-linux-gnu
上記コマンドだけで勝手にARM用の実行ファイルを作ってくれる。
実行ファイル↓
./target/aarch64-unknown-linux-gnu/debug/<project_name>
- 実行ファイルをscpコマンドでjetsonへコピーする
以下のコマンドでsshを使って実行ファイルをJetson側へコピーする
scp <local_path_to_executable> <remote_user>@<jetson_ip>:<remote_path>
- <local_path_to_executable> : 実行ファイルのpath
- <remote_user> : jetsonのログインuser
- <jetson_ip> : jetsonのIPアドレス
- <remote_path> : jetson内のどこに格納するか指定するためのpath
- jetson上で実行する
格納したファイル内で実行ファイルを動かす
Discussion