Comment comstackr de Mac à Linux?

J’ai écrit un petit jeu en utilisant Rust, et j’ai utilisé cargo build --release pour comstackr une version sur Mac.

J’ai essayé de partager ceci avec mon ami qui utilise Ubuntu, mais quand il a essayé de lancer le binary, il a eu l’erreur suivante:

 cannot execute binary file: Exec format error 

J’ai cherché ceci mais je n’ai trouvé aucune réponse. Rust ne prétend-il pas avoir “pas de runtime”? Ne devrait-il pas pouvoir fonctionner n’importe où sous forme binary?

La rouille n’ayant pas d’exécution signifie qu’il n’y a pas beaucoup de code exécuté dans le langage (par exemple, un garbage collector ou un interpréteur de bytecode). Il doit encore utiliser les primitives du système d’exploitation (c.-à-d. Syscalls), et celles-ci sont différentes sous MacOS et Linux.

Ce que vous voulez, c’est un compilateur croisé. Si vous utilisez rustup , l’ installation d’un compilateur croisé doit être simple:

 # Install the toolchain to build Linux x86_64 binaries rustup target add x86_64-unknown-linux-gnu 

Alors la construction est:

 cargo build --release --target=x86_64-unknown-linux-gnu 

Mise en garde: Je n’ai pas de machine OS X pour tester cela; S’il vous plaît commenter ou modifier pour résoudre ce problème si cela fonctionne!

Eh bien, c’est parce que Rust n’a pas de temps d’exécution (contrairement à JVM par exemple), vous ne pouvez pas simplement comstackr du code sur un système d’exploitation et vous attendre à ce qu’il fonctionne sur un autre; Ce que vous recherchez est une compilation croisée . Je ne l’ai pas fait dans Rust, mais d’après ce que je peux en tirer, vous pouvez trouver des informations pertinentes sur les différentes stratégies de compilation croisée sur ce repository GitHub .