以下のサイトを参考にx86のLinux環境でのクロスはできた。
https://betterprogramming.pub/cross-compiling-rust-from-mac-to-linux-7fad5a454ab1
結構普通のやり方だと思うけど、brewでターゲット用のlinkerをインストールしているのが大事なところでしょう。ラズパイ用がbuild出来ないのもおそらくlinkerをインストールしていないからでしょう
% brew install SergioBenitez/osxct/x86_64-unknown-linux-gn
.cargo/config.toml を作成編集
and adding the linker for the target:
[target.x86_64-unknown-linux-gnu]
linker = "x86_64-unknown-linux-gnu-gcc"
% TARGET_CC=x86_64-unknown-linux-gnu cargo build --release --target x86_64-unknown-linux-gnu
Compiling rust v0.1.0 (/Users/xxxxx/rust)
error[E0463]: can't find crate for `std`
=> 見覚えのあるエラーがやはりでる。
% rustup target add x86_64-unknown-linux-gnu
でライブラリインストールして解決。
% TARGET_CC=x86_64-unknown-linux-gnu cargo build --release --target x86_64-unknown-linux-gnu
Compiling rust v0.1.0 (/Users/usamiryuuichi/rust)
Finished release [optimized] target(s) in 1.60s
.cargo/config.tomlはディレクトリの親含めて検索するようですが、今回はプロジェクトのルートに作成。
クロスコンパイルなのでコンパイル時間はネーティブよりかかるのはGolangと同じです。Docker使ってもできるはず、というかラズパイ用のlinkerは同サイトには見えないのでDocker使うのが一番素直な感じがします。Golangでネーティブのgccを使わない限りにおいてはDockerは必要ないので、この点ではGolangのほうが使いやすさはあります。
動作はIntel MacのVMware上のUbuntuで確認しました。
admin