tag ejecutar compilar como linux windows rust cross-compiling

ejecutar - Compilación cruzada de una aplicación Rust de Linux a Windows



compilar y ejecutar c en linux gcc (2)

Básicamente, estoy tratando de compilar el código más simple para Windows mientras desarrollo en Linux.

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

Encontré estos comandos buscando en internet:

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

Lamentablemente, ninguno de ellos funciona. Me da un error sobre la caja estándar que falta

$ 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

¿Hay alguna manera de compilar código en Linux que se ejecutará en Windows?


La distribución de Rust solo proporciona bibliotecas compiladas para el sistema host. Sin embargo, de acuerdo con la página wiki de Arch Linux en Rust , puede copiar las bibliotecas compiladas de los paquetes de Windows en el directorio de descarga (tenga en cuenta que hay paquetes i686 y x86-64) en el lugar apropiado de su sistema (en /usr/lib/rustlib o /usr/local/lib/rustlib , dependiendo de dónde esté instalado Rust), instale mingw-w64-gcc y Wine, y usted debería poder realizar una compilación cruzada.

Si está utilizando Cargo, puede decirle a Cargo dónde buscar ar y al enlazador al agregarlo a ~/.cargo/config (donde $ARCH es la arquitectura que usa):

[target.$ARCH-pc-windows-gnu] linker = "/usr/bin/$ARCH-w64-mingw32-gcc" ar = "/usr/$ARCH-w64-mingw32/bin/ar"

Nota: las rutas exactas pueden variar según su distribución. Consulte la lista de archivos para los paquetes de mingw-w64 (GCC y binutils) en su distribución.

Entonces puedes usar Cargo así:

$ # Build $ cargo build --release --target "$ARCH-pc-windows-gnu" $ # Run unit tests under wine $ cargo test --target "$ARCH-pc-windows-gnu"


Vamos a compilar ejemplos del proyecto rust-sdl2 de Ubuntu a Windows x86_64

En ~/.cargo/config

[target.x86_64-pc-windows-gnu] linker = "x86_64-w64-mingw32-gcc" ar = "x86_64-w64-mingw32-gcc-ar"

Luego ejecuta esto:

sudo apt-get install gcc-mingw-w64-x86-64 -y # use rustup to add target https://github.com/rust-lang-nursery/rustup.rs 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 wget https://www.libsdl.org/release/SDL2-devel-2.0.4-mingw.tar.gz -P /tmp tar xf /tmp/SDL2-devel-2.0.4-mingw.tar.gz -C /tmp # Prepare files for building mkdir -p ~/projects cd ~/projects git clone https://github.com/AngryLawyer/rust-sdl2 cp -r /tmp/SDL2-2.0.4/x86_64-w64-mingw32/lib/* ~/.multirust/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-pc-windows-gnu/lib/ cp /tmp/SDL2-2.0.4/x86_64-w64-mingw32/bin/SDL2.dll ~/rust-sdl2/ # Build examples # we use loop for...in because there is no such feature in cargo to build all examples at once for i in examples/*; do cargo build --target=x86_64-pc-windows-gnu --verbose --example $(basename $i .rs); done

correr

cargo build pondrá binarios en target/x86_64-pc-windows-gnu/debug/examples/

Copie los archivos necesarios:

cp /tmp/SDL2-2.0.4/x86_64-w64-mingw32/bin/SDL2.dll ~/rust-sdl/target/x86_64-pc-windows-gnu/debug/examples/ cp ~/rust-sdl/tests/sine.wav ~/rust-sdl/target/x86_64-pc-windows-gnu/debug/examples/

Luego copie el directorio ~/rust-sdl/target/x86_64-pc-windows-gnu/debug/examples/ en su máquina Windows y ejecute los archivos exe.

Ejecutar en cmd.exe

Si desea ver la salida de la consola al ejecutar archivos exe, puede ejecutarlos desde cmd.exe .

Para abrir cmd.exe en el directorio actual en el explorador de archivos, haga clic derecho con shift en el lugar vacío en la ventana y seleccione Open command window here .

Sin retrocesos con mingw: use msvc

Mientras tanto, si quieres retrocesos y no te importa instalar VC ++, siempre puedes usar la versión x86_64-pc-windows-msvc de Rust.

https://github.com/rust-lang/rust/issues/33985#issuecomment-222826116