複数のプラットフォームで実行するには、@huon-dbauapp がコメントしたように、それぞれの実行可能ファイルをビルドする必要があります。
これはRustではかなり簡単です。何をビルドしたいかをrustcに伝えるために"--target="を使用します。Cargo でも同じフラグが機能します。
たとえば、これは ARM ターゲット用にビルドします。
cargo build --target=arm-unknown-linux-gnueabihf
ターゲットの詳細については、Rustフレキシブル ターゲット仕様を参照してください。
ただし、Rust には ARM 用にコンパイルされた std Crate が同梱されていません (2015 年 6 月現在)。これがあなたのターゲットの場合、最初にターゲット用の std クレートを自分でコンパイルする必要があります。これには、ソースから Rust コンパイラをコンパイルし、そのビルドのターゲットを指定することが含まれます!
情報については、これのほとんどはhttps://github.com/japaric/ruststrap/blob/master/1-how-to-cross-compile.mdからコピーされています。
以下の手順は gcc 用です。これがない場合は、インストールする必要があります。対応するクロス コンパイラ ツールも必要になるため、gcc の場合:
sudo apt-get install gcc-arm-linux-gnueabihf
Rust std クレートを ARM 用にコンパイルする
次の例では、現在の Rust Nightly が既にインストールされていることを前提としているため、ソースを取得して ARM 用にコンパイルします。別のバージョンのコンパイラを使用している場合は、プロジェクトのビルドに使用しているコンパイラのバージョンと ARM ライブラリが一致していることを確認するために、それを取得する必要があります。
mkdir ~/toolchains
cd ~/toolchains
git clone https://github.com/rust-lang/rust.git
cd rust
git update
ARM用のrustcをビルドする
cd ~/toolchains/rust
./configure --target=arm-unknown-linux-gnueabihf,x86_64-unknown-linux-gnu
make -j4
sudo make install
「-j4」には少なくとも 8GB の RAM が必要なので、上記の問題が発生した場合は、代わりに「make」を試してください。
ネイティブのrustcビルドにARMのrustcライブラリをインストールする
sudo ln -s $HOME/src/rust/arm-unknown-linux-gnueabihf /usr/lib/rustlib/arm-unknown-linux-gnueabihf
以下を含む hello.rs を作成します。
pub fn main() {
println!("Hello, world!");
}
hello.rs をコンパイルし、rustc にクロスコンパイラの名前を伝えます (パスにある必要があります):
rustc -C linker=arm-linux-gnueabihf-gcc-4.9 --target=arm-unknown-linux-gnueabihf hello.rs
生成されたバイナリが本当に ARM バイナリであることを確認します:
$ file hello
hello: ELF 32 ビット LSB 共有オブジェクト、ARM、EABI5 バージョン 1 (SYSV)、(..)
成功!!!:
チェック: バイナリは ARM デバイスで動作するはずです
$ scp hello me@arm:~
$ ssh me@arm ./hello
Hello, world!
これを使用して、Rust プロジェクトをビルドし、別の C ライブラリにもリンクしました。動的または静的にこれを行う方法に関する上記と同様の手順は別の投稿にありますが、リンクのクォータをすでに使い切ってしまいました!