Rustはクロスコンパイルが非常に簡単にできるように設計されています.
この記事では,「WindowsからLinuxのクロスコンパイル」と「LinuxからWindowsのクロスコンパイル」の手順を記載します.
必要なツールのインストール
クロスコンパイルツールチェーンのインストール
クロスコンパイル用のツールチェインをインストールします.
cargo install cross
Dockerのインストール
crossは内部でDockerを使用するため,Dockerのインストールが必要です.
Dockerは,公式サイトのインストールガイドに従ってインストールしてください.Rootless Dockerのインストール方法は下記記事にまとめてあります.
Windowsの場合は,Docker Desktopを使うとインストールが楽です.
Linuxの場合,Dockerは管理者権限のためユーザ権限でRustのクロスコンパイルを行う場合,次のエラーが発生します.
docker: permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/create": dial unix /var/run/docker.sock: connect: permission denied.
usermod -aG docker $USER
でユーザ権限でDockerを使用可能にするか,Rootless Dockerを使用してください.
クロスコンパイルの対応表
クロスコンパイルをサポートしているプラットフォームは下記の通りです.
aarch64-linux-android
aarch64-unknown-linux-gnu
aarch64-unknown-linux-gnu:centos
aarch64-unknown-linux-musl
arm-linux-androideabi
arm-unknown-linux-gnueabi
arm-unknown-linux-gnueabihf
arm-unknown-linux-musleabi
arm-unknown-linux-musleabihf
armv5te-unknown-linux-gnueabi
armv5te-unknown-linux-musleabi
armv7-linux-androideabi
armv7-unknown-linux-gnueabi
armv7-unknown-linux-gnueabihf
armv7-unknown-linux-musleabi
armv7-unknown-linux-musleabihf
i586-unknown-linux-gnu
i586-unknown-linux-musl
i686-unknown-freebsd
i686-linux-android
i686-pc-windows-gnu
i686-unknown-linux-gnu
mips-unknown-linux-gnu
mips-unknown-linux-musl
mips64-unknown-linux-gnuabi64
mips64-unknown-linux-muslabi64
mips64el-unknown-linux-gnuabi64
mips64el-unknown-linux-muslabi64
mipsel-unknown-linux-gnu
mipsel-unknown-linux-musl
powerpc-unknown-linux-gnu
powerpc64-unknown-linux-gnu
powerpc64le-unknown-linux-gnu
riscv64gc-unknown-linux-gnu
s390x-unknown-linux-gnu
sparc64-unknown-linux-gnu
sparcv9-sun-solaris
thumbv6m-none-eabi
thumbv7em-none-eabi
thumbv7em-none-eabihf
thumbv7m-none-eabi
thumbv7neon-linux-androideabi
thumbv7neon-unknown-linux-gnueabihf
thumbv8m.base-none-eabi
thumbv8m.main-none-eabi
thumbv8m.main-none-eabihf
wasm32-unknown-emscripten
x86_64-linux-android
x86_64-pc-windows-gnu
x86_64-sun-solaris
x86_64-unknown-freebsd
x86_64-unknown-dragonfly
x86_64-unknown-illumos
x86_64-unknown-linux-gnu
x86_64-unknown-linux-gnu:centos
x86_64-unknown-linux-musl
x86_64-unknown-netbsd
最新情報はこちらから確認してください.
WindowからLinuxにクロスコンパイル
64bit Linuxのビルド環境を用意します.
rustup target add x86_64-unknown-linux-gnu
下記コマンドでビルドします.
cross build --target x86_64-unknown-linux-gnu --release
成果物は,target/x86_64-unknown-linux-gnu/release
に作成されます.
LinuxからWindowsにクロスコンパイル
64bit Windowsのビルド環境を用意します.
rustup target add x86_64-pc-windows-gnu
下記コマンドでビルドします.
cross build --target x86_64-pc-windows-gnu --release
成果物は,target/x86_64-pc-windows-gnu/release
に作成されます.
まとめ
C++等では結構面倒ですが,Rustでは非常に簡単にクロスコンパイルができます.