Jawaban lain, meskipun secara teknis benar, lebih sulit dari yang seharusnya. Tidak perlu menggunakan rustc
(sebenarnya tidak disarankan, gunakan saja cargo
), Anda hanya memerlukan rustup
, cargo
dan mingw-w64 distribusi Anda.
Tambahkan target (Anda juga dapat mengubah ini untuk target apa pun yang Anda kompilasi silang):
rustup target add x86_64-pc-windows-gnu
Anda dapat membuat peti dengan mudah menggunakan:
cargo build --target x86_64-pc-windows-gnu
Tidak perlu dipusingkan dengan ~/.cargo/config
atau apa pun.
EDIT:Hanya ingin menambahkan bahwa meskipun Anda dapat menggunakan yang di atas, terkadang juga bisa membuat pusing. Saya ingin menambahkan bahwa tim alat karat juga mengelola proyek bernama cross:https://github.com/rust-embedded/crossIni mungkin solusi lain yang ingin Anda lihat
Distribusi Rust hanya menyediakan pustaka yang dikompilasi untuk sistem host. Namun, menurut halaman wiki Arch Linux di Rust, Anda dapat menyalin pustaka yang dikompilasi dari paket Windows di direktori unduhan (perhatikan bahwa ada paket i686 dan x86-64) di tempat yang sesuai di sistem Anda (di /usr/lib/rustlib
atau /usr/local/lib/rustlib
, tergantung di mana Rust diinstal), instal mingw-w64-gcc dan Wine dan Anda akan dapat melakukan kompilasi silang.
Jika Anda menggunakan Cargo, Anda dapat memberi tahu Cargo tempat mencari ar
dan linker dengan menambahkan ini ke ~/.cargo/config
(di mana $ARCH
adalah arsitektur yang Anda gunakan):
[target.$ARCH-pc-windows-gnu]
linker = "/usr/bin/$ARCH-w64-mingw32-gcc"
ar = "/usr/$ARCH-w64-mingw32/bin/ar"
Catatan:jalur yang tepat dapat bervariasi berdasarkan distribusi Anda. Periksa daftar file untuk paket mingw-w64 (GCC dan binutils) di distribusi Anda.
Kemudian Anda dapat menggunakan Kargo seperti ini:
$ # Build
$ cargo build --release --target "$ARCH-pc-windows-gnu"
$ # Run unit tests under wine
$ cargo test --target "$ARCH-pc-windows-gnu"
PEMBARUAN 11-06-2019
Ini gagal untuk saya dengan:
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
Mungkin ini akan membantu https://github.com/rust-lang/rust/issues/44787
Kompilasi statis sdl2
Ada opsi untuk mengkompilasi statis sdl tetapi tidak berhasil untuk saya.
Mixer juga tidak disertakan saat digunakan dengan paket.
Mari mengkompilasi silang contoh dari proyek rust-sdl2 dari Ubuntu ke Windows x86_64
Di ~/.cargo/config
[target.x86_64-pc-windows-gnu]
linker = "x86_64-w64-mingw32-gcc"
ar = "x86_64-w64-mingw32-gcc-ar"
Kemudian jalankan ini:
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 .
Buat contoh sekaligus
cargo build --target=x86_64-pc-windows-gnu --verbose --examples
Atau berhenti setelah gagal pertama:
echo; for i in examples/*; do [ $? -eq 0 ] && cargo build --target=x86_64-pc-windows-gnu --verbose --example $(basename $i .rs); done
Lari
cargo build
akan menempatkan binari di target/x86_64-pc-windows-gnu/debug/examples/
Salin file yang dibutuhkan:
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/
Kemudian salin direktori target/x86_64-pc-windows-gnu/debug/examples/
ke mesin Windows Anda dan jalankan file exe.
Jalankan di cmd.exe
Jika Anda ingin melihat keluaran konsol saat menjalankan file exe, Anda dapat menjalankannya dari cmd.exe
.
Untuk membuka cmd.exe
di direktori saat ini di file explorer, klik kanan dengan shift di tempat kosong di jendela dan pilih Open command window here
.
Lacak balik dengan mingw seharusnya berfungsi sekarang - jika tidak gunakan msvc https://github.com/rust-lang/rust/pull/39234