如何从Mac交叉编译到Linux?

时间:2017-01-20 10:33:00

标签: macos ubuntu rust rust-cargo

我使用Rust编写了一个小游戏,并使用cargo build --release在Mac上编译发布版本。

我尝试与使用Ubuntu的朋友分享这个,但是当他试图运行二进制文件时,他收到了以下错误:

cannot execute binary file: Exec format error

我搜索了这个,但没有找到答案。 Rust没有宣称没有"没有运行时"?难道它不能以二进制形式运行吗?

2 个答案:

答案 0 :(得分:5)

Rust没有运行时意味着它没有很多代码作为语言的一部分运行(例如垃圾收集器或字节码解释器)。它仍然需要使用操作系统原语(即系统调用),这些在MacOS和Linux上是不同的。

你想要的是一个交叉编译器。如果您使用的是rustup,则installing a cross compiler应该很简单:

# Install the toolchain to build Linux x86_64 binaries
rustup target add x86_64-unknown-linux-gnu

然后建立是:

cargo build --release --target=x86_64-unknown-linux-gnu

警告:我没有OS X机器来测试它;如果有效,请评论或编辑以解决此问题!

答案 1 :(得分:2)

嗯,它是因为 Rust没有运行时(与Java的JVM不同),你不能只在一个操作系统上编译代码并期望它在另一个操作系统上运行;你要找的是cross-compilation。我没有在Rust中完成它,但是从我可以收集到的内容中,您可以在GitHub repo上找到有关不同交叉编译Rust策略的相关信息。