1. ホーム
  2. linux

RustアプリケーションをLinuxからWindowsにクロスコンパイルする

2023-11-03 14:43:15

質問

基本的に私はLinuxで開発しながら、最も簡単なコードをWindowsにコンパイルしようとしています。

fn main() {
    println!("Hello, and bye.")
}

これらのコマンドは、インターネットで検索して見つけました。

rustc --target=i686-w64-mingw32-gcc  main.rs
rustc --target=i686_pc_windows_gnu -C linker=i686-w64-mingw32-gcc  main.rs

悲しいかな、どれもうまくいきません。std crateが見つからないというエラーが出ます。

$ rustc --target=i686_pc_windows_gnu -C linker=i686-w64-mingw32-gcc  main.rs 

main.rs:1:1: 1:1 error: can't find crate for `std`
main.rs:1 fn main() {
          ^
error: aborting due to previous error

Windowsで動作するコードをLinuxでコンパイルする方法はありますか?

どのように解決するのですか?

他の回答は、技術的には正しいのですが、必要以上に難しいです。また rustc を使う必要はありません (むしろ推奨されません。単に cargo を使うだけです)、必要なのは rustup , cargo と、あなたのディストリビューションのmingw-w64を指定します。

ターゲットを追加します(クロスコンパイルするターゲットに変更することも可能です)。

rustup target add x86_64-pc-windows-gnu
rustup toolchain install stable-x86_64-pc-windows-gnu

で簡単にクレートを構築することができます。

cargo build --target x86_64-pc-windows-gnu

でごちゃごちゃやる必要はありません。 ~/.cargo/config などといじる必要はありません。

EDIT: ただ、上記を使うことができる一方で、時には頭痛の種になることもあることを付け加えたいと思います。また、Rust Tools チームは cross というプロジェクトを管理していることも付け加えておきます。 https://github.com/rust-embedded/cross これは、あなたが調べたいもう一つの解決策かもしれません。