GNU/Linux >> Belajar Linux >  >> Linux

Kompilasi silang aplikasi Rust dari Linux ke Windows

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


Linux
  1. Cara Remote Desktop Dari Windows Ke Desktop Linux Menggunakan XRDP

  2. Luncurkan penginstal perangkat lunak di Linux dari Windows menggunakan Cygwin

  3. Bagaimana saya bisa menjalankan aplikasi OpenGL yang terinstal di mesin linux dari mesin windows saya?

  1. Terhubung ke Linux dari Windows dengan menggunakan Putty

  2. Menggunakan Windows DLL dari Linux

  3. Matikan mesin Windows dari terminal linux

  1. Menggunakan putty untuk scp dari windows ke Linux

  2. salin file pscp dari jarak jauh dari Windows ke Linux

  3. Kloning partisi Windows dari Linux