En gros, j'essaye de compiler le code le plus simple sous Windows pendant que je développe sous Linux.
fn main() {
println!("Hello, and bye.")
}
J'ai trouvé ces commandes en cherchant sur Internet:
rustc --target=i686-w64-mingw32-gcc main.rs
rustc --target=i686_pc_windows_gnu -C linker=i686-w64-mingw32-gcc main.rs
Malheureusement, aucun d'entre eux ne fonctionne. Cela me donne une erreur à propos de la caisse std manquante
$ 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
Existe-t-il un moyen de compiler du code sous Linux qui s'exécutera sous Windows?
La distribution Rust fournit uniquement des bibliothèques compilées pour le système hôte. Cependant, selon la page wiki de Arch Linux sur Rust , vous pouvez copier les bibliothèques compilées des packages Windows dans le répertoire download (notez qu'il existe des packages i686 et x86-64) à l'emplacement approprié sur votre système (en /usr/lib/rustlib
ou /usr/local/lib/rustlib
, selon l’emplacement où Rust est installé), installez mingw-w64-gcc et Wine et vous devriez être en mesure de procéder à une compilation croisée.
Si vous utilisez Cargo, vous pouvez indiquer à Cargo où chercher ar
et l'éditeur de liens en ajoutant ceci à ~/.cargo/config
(où $Arch
est l'architecture que vous utilisez):
[target.$Arch-pc-windows-gnu]
linker = "/usr/bin/$Arch-w64-mingw32-gcc"
ar = "/usr/$Arch-w64-mingw32/bin/ar"
Remarque: les chemins exacts peuvent varier en fonction de votre distribution. Vérifiez la liste des fichiers des packages mingw-w64 (GCC et binutils) dans votre distribution.
Ensuite, vous pouvez utiliser Cargo comme ceci:
$ # Build
$ cargo build --release --target "$Arch-pc-windows-gnu"
$ # Run unit tests under wine
$ cargo test --target "$Arch-pc-windows-gnu"
J'ai eu du succès avec Debian (tests) sans utiliser Mingw et Wine en suivant simplement les instructions officielles . Ils ont l'air effrayant, mais à la fin, ça ne m'a pas fait trop mal.
Quelques remarques pour des points individuels dans les instructions officielles:
Sudo apt-get install lld
lld-link
à lld
quelque part dans votre $ PATH. Exemple: ln -s /usr/bin/lld local_bin/lld-link
for f in `find`; do mv -v "$f" "`echo $f | tr '[A-Z]' '[a-z]'`"; done
Personnellement, j'ai eu besoin des deux répertoires Kit et d'un seul des répertoires VC.
$LIB_ROOT
dans le script à la fin de ce post, pointez sur le répertoire lib à partir du point 4.rustup target add i686-pc-windows-msvc
rustup target add x86_64-pc-windows-msvc
Pour la construction croisée elle-même, j'utilise le script simple suivant (version 32 bits):
#!/bin/sh
# "cargo build" for the 32-bit Windows MSVC architecture.
# Set this to proper directory
LIB_ROOT=~/opt/Rust-msvc
# The rest shouldn't need modifications
VS_LIBS="$LIB_ROOT/Microsoft Visual Studio 14.0/VC/lib/"
KIT_8_1_LIBS="$LIB_ROOT/Windows Kits/8.1/Lib/winv6.3/um/x86/"
KIT_10_LIBS="$LIB_ROOT/Windows Kits/10/Lib/10.0.10240.0/ucrt/x86/"
export LIB="$VS_LIBS;$KIT_8_1_LIBS;$KIT_10_LIBS"
cargo build --target=i686-pc-windows-msvc "$@"
J'utilise le script de la même façon que j'utilise cargo build
J'espère que ça aide quelqu'un!