2017-01-20 19 views
4

私はRustを使って少しゲームを書いていましたが、私はcargo build --releaseを使ってMacでリリース版をコンパイルしました。MacからLinuxにクロスコンパイルするには?

私はUbuntuのを使用している私の友人でこれを共有しようとしましたが、彼は、バイナリを実行しようとしたとき、彼は次のエラーを得た:

cannot execute binary file: Exec format error 

私は、この検索が、何の答えを見つけていません。錆は「ランタイムなし」と主張していないのですか?バイナリ形式でどこでも実行できるはずですか?

答えて

6

ランタイムを持たない錆は、言語の一部として実行されている多くのコード(ガベージコレクタやバイトコードインタープリタなど)がないことを意味します。オペレーティングシステムプリミティブ(つまりシステムコール)を使用する必要がありますが、これは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マシンを持っていません。それが機能する場合は、コメントしてください。

+0

私は 'x86_64-linux-gnu-gcc'をインストールし、' .cargo/config'に 'リンカ'を追加してその作業を行わなければならないかもしれないと思います。 – FrontMage

+3

@FrontMage - 'x86_64-linux-gnu-gcc'をMacにインストールするには? –

2

ルストは、あるOSでコードをコンパイルして別のOSで実行するだけでは実行できないランタイム(JavaのJVMとは異なります)がないため、です。あなたが探しているのはcross-compilationです。私はRustでそれをやっていないが、私が集めることができるから、これは異なるクロスコンパイルのRust戦略に関する関連情報を見つけることができるGitHub repo

関連する問題