他の答えは、技術的には正しいですが、必要以上に難しいものです。 rustc
を使用する必要はありません (実際には推奨されません。 cargo
を使用してください。 )、必要なのは rustup
だけです 、 cargo
およびディストリビューションの mingw-w64.
ターゲットを追加します (クロス コンパイルするターゲットに合わせてこれを変更することもできます):
rustup target add x86_64-pc-windows-gnu
クレートは次の方法で簡単に作成できます:
cargo build --target x86_64-pc-windows-gnu
~/.cargo/config
をいじる必要はありません
編集:上記を使用できる一方で、それを追加したかっただけで、頭痛の種になることもあります。私は、Rust ツール チームが cross というプロジェクトも維持していることを付け加えたいと思います:https://github.com/rust-embedded/cross
Rust ディストリビューションは、ホスト システム用にコンパイルされたライブラリのみを提供します。ただし、Rust に関する Arch Linux の wiki ページによると、ダウンロード ディレクトリ (i686 および x86-64 パッケージがあることに注意してください) の Windows パッケージからコンパイル済みライブラリをシステムの適切な場所 (/usr/lib/rustlib
または /usr/local/lib/rustlib
、Rust がインストールされている場所に応じて)、mingw-w64-gcc と Wine をインストールすると、クロスコンパイルできるはずです。
Cargo を使用している場合、Cargo に ar
を探す場所を伝えることができます。 これを ~/.cargo/config
に追加してリンカー (ここで $ARCH
は使用するアーキテクチャです):
[target.$ARCH-pc-windows-gnu]
linker = "/usr/bin/$ARCH-w64-mingw32-gcc"
ar = "/usr/$ARCH-w64-mingw32/bin/ar"
注:正確なパスは、ディストリビューションによって異なる場合があります。ディストリビューション内の mingw-w64 パッケージ (GCC および binutils) のファイルのリストを確認してください。
次に、Cargo を次のように使用できます。
$ # Build
$ cargo build --release --target "$ARCH-pc-windows-gnu"
$ # Run unit tests under wine
$ cargo test --target "$ARCH-pc-windows-gnu"
更新 2019-06-11
これは私にとって失敗します:
Running `rustc --crate-name animation examples/animation.rs --color always --crate-type bin --emit=dep-info,link -C debuginfo=2 --cfg 'feature="default"' -C metadata=006e668c6384c29b -C extra-filename=-006e668c6384c29b --out-dir /home/roman/projects/rust-sdl2/target/x86_64-pc-windows-gnu/debug/examples --target x86_64-pc-windows-gnu -C ar=x86_64-w64-mingw32-gcc-ar -C linker=x86_64-w64-mingw32-gcc -C incremental=/home/roman/projects/rust-sdl2/target/x86_64-pc-windows-gnu/debug/incremental -L dependency=/home/roman/projects/rust-sdl2/target/x86_64-pc-windows-gnu/debug/deps -L dependency=/home/roman/projects/rust-sdl2/target/debug/deps --extern bitflags=/home/roman/projects/rust-sdl2/target/x86_64-pc-windows-gnu/debug/deps/libbitflags-2c7b3e3d10e1e0dd.rlib --extern lazy_static=/home/roman/projects/rust-sdl2/target/x86_64-pc-windows-gnu/debug/deps/liblazy_static-a80335916d5ac241.rlib --extern libc=/home/roman/projects/rust-sdl2/target/x86_64-pc-windows-gnu/debug/deps/liblibc-387157ce7a56c1ec.rlib --extern num=/home/roman/projects/rust-sdl2/target/x86_64-pc-windows-gnu/debug/deps/libnum-18ac2d75a7462b42.rlib --extern rand=/home/roman/projects/rust-sdl2/target/x86_64-pc-windows-gnu/debug/deps/librand-7cf254de4aeeab70.rlib --extern sdl2=/home/roman/projects/rust-sdl2/target/x86_64-pc-windows-gnu/debug/deps/libsdl2-3f37ebe30a087396.rlib --extern sdl2_sys=/home/roman/projects/rust-sdl2/target/x86_64-pc-windows-gnu/debug/deps/libsdl2_sys-3edefe52781ad7ef.rlib -L native=/home/roman/.cargo/registry/src/github.com-1ecc6299db9ec823/winapi-x86_64-pc-windows-gnu-0.4.0/lib`
error: linking with `x86_64-w64-mingw32-gcc` failed: exit code: 1
たぶんこれが役立つでしょう https://github.com/rust-lang/rust/issues/44787
静的コンパイル sdl2
sdl を静的コンパイルするオプションがありますが、うまくいきませんでした。
また、バンドルで使用する場合、ミキサーは含まれません。
rust-sdl2 プロジェクトのサンプルを Ubuntu から Windows x86_64 にクロスコンパイルしてみましょう
~/.cargo/config
で
[target.x86_64-pc-windows-gnu]
linker = "x86_64-w64-mingw32-gcc"
ar = "x86_64-w64-mingw32-gcc-ar"
次に、これを実行します:
sudo apt-get install gcc-mingw-w64-x86-64 -y
# use rustup to add target https://github.com/rust-lang/rustup.rs#cross-compilation
rustup target add x86_64-pc-windows-gnu
# Based on instructions from https://github.com/AngryLawyer/rust-sdl2/
# First we need sdl2 libs
# links to packages https://www.libsdl.org/download-2.0.php
sudo apt-get install libsdl2-dev -y
curl -s https://www.libsdl.org/release/SDL2-devel-2.0.9-mingw.tar.gz | tar xvz -C /tmp
# Prepare files for building
mkdir -p ~/projects
cd ~/projects
git clone https://github.com/Rust-SDL2/rust-sdl2
cd rust-sdl2
cp -r /tmp/SDL2-2.0.9/x86_64-w64-mingw32/lib/* ~/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-pc-windows-gnu/lib/
cp /tmp/SDL2-2.0.9/x86_64-w64-mingw32/bin/SDL2.dll .
サンプルを一度に作成
cargo build --target=x86_64-pc-windows-gnu --verbose --examples
または最初の失敗後に停止:
echo; for i in examples/*; do [ $? -eq 0 ] && cargo build --target=x86_64-pc-windows-gnu --verbose --example $(basename $i .rs); done
走る
cargo build
target/x86_64-pc-windows-gnu/debug/examples/
にバイナリを配置します
必要なファイルをコピー:
cp /tmp/SDL2-2.0.4/x86_64-w64-mingw32/bin/SDL2.dll target/x86_64-pc-windows-gnu/debug/examples/
cp assets/sine.wav target/x86_64-pc-windows-gnu/debug/examples/
次に、ディレクトリ target/x86_64-pc-windows-gnu/debug/examples/
をコピーします Windows マシンにコピーして、exe ファイルを実行してください。
cmd.exe で実行
exe ファイルを実行しているときにコンソール出力を見たい場合は、それらを cmd.exe
から実行できます。 .
cmd.exe
を開くには ファイルエクスプローラーの現在のディレクトリで、ウィンドウの空の場所をShiftキーを押しながら右クリックし、Open command window here
を選択します .
mingw を使用したバックトレースが機能するようになりました - msvc を使用しない場合は https://github.com/rust-lang/rust/pull/39234