如@huon-dbauapp 所说,要在多个平台上运行,您需要为每个平台构建一个可执行文件。
这对于 Rust 来说相当简单。你使用 "--target=" 和 rustc 来告诉它你想要构建什么。同样的标志也适用于 Cargo。
例如,这是为 ARM 目标构建的:
cargo build --target=arm-unknown-linux-gnueabihf
有关目标的更多信息,请参阅 Rust灵活目标规范。
但是,Rust 不附带为 ARM 编译的 std Crate(截至 2015 年 6 月)。如果您的目标是这种情况,您首先需要自己为目标编译 std Crates,这涉及从源代码编译 Rust 编译器,并为该构建指定目标!
有关信息,其中大部分内容复制自:https ://github.com/japaric/ruststrap/blob/master/1-how-to-cross-compile.md
以下说明适用于 gcc,因此如果您没有此说明,则需要安装它。您还需要相应的交叉编译器工具,因此对于 gcc:
sudo apt-get install gcc-arm-linux-gnueabihf
为 ARM 编译 Rust std Crate
以下示例假设您已经安装了当前的 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 交叉编译器的名称(它必须在你的 PATH 中):
rustc -C linker=arm-linux-gnueabihf-gcc-4.9 --target=arm-unknown-linux-gnueabihf hello.rs
检查生成的二进制文件是否真的是 ARM 二进制文件:
$ file hello
hello: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), (..)
成功!!!:
检查:二进制文件应该可以在 ARM 设备上运行
$ scp hello me@arm:~
$ ssh me@arm ./hello
Hello, world!
我也用它来构建一个 Rust 项目并将其链接到一个单独的 C 库。与上述类似的关于如何动态或静态执行此操作的说明在单独的帖子中,但我已经使用了我的链接配额!