| Prochaine révision | Révision précédente |
| utilisateurs:amj:brouillons:qemu-user [Le 18/01/2014, 17:25] – créée amj | utilisateurs:amj:brouillons:qemu-user [Le 11/09/2022, 13:14] (Version actuelle) – Suppression des espaces en fin de ligne (détecté et corrigé via le bot wiki-corrector (https://forum.ubuntu-fr.org/viewtopic.php?id=2067892) moths-art |
|---|
| |
| compilons un helloworld pour une architecture différente de celle de l'hôte, <arch> . (vous devez avoir installé un compilateur croisé pour cette architecture préalablement [[:tutoriel:compilation_croisee]] ou utilisez crosstool-ng ) | compilons un helloworld pour une architecture différente de celle de l'hôte, <arch> . (vous devez avoir installé un compilateur croisé pour cette architecture préalablement [[:tutoriel:compilation_croisee]] ou utilisez crosstool-ng ) |
| [[:tutoriel:comment_modifier_un_fichier|Créez le fichier]] helloworld.c | [[:tutoriel:comment_modifier_un_fichier|Créez le fichier]] |
| <code>#include <stdio.h> | <file c helloworld.c>#include <stdio.h> |
| int main () | int main () |
| { | { |
| printf ("Hello World!\n"); | printf ("Hello World!\n"); |
| } </code> | } </file> |
| |
| <code> <arch>-gcc helloworld.c </code> | <code> <arch>-gcc helloworld.c </code> |
| <note tip>attention le nom de gcc n'est pas toujours identique faites <code>ls /usr/bin/*gcc</code> pour le retrouver</note> | <note tip>attention le nom de gcc n'est pas toujours identique faites <code>ls /usr/bin/*gcc</code> pour le retrouver facilement</note> |
| <code>./a.out | <code>./a.out |
| bash: ./a.out : fichier binaire impossible à lancer </code> | bash: ./a.out : fichier binaire impossible à lancer </code> |
| |
| L'exécutable a.out étant pour une architecture différente de l'hôte il ne peut pas être éxécuté | L'exécutable a.out étant pour une architecture différente de l'hôte il ne peut pas être exécuté |
| |
| [[:tutoriel:comment_installer_un_paquet|installez les paquets]] **[[apt>qemu-user-static]]** et **[[apt>binfmt-support]]** | [[:tutoriel:comment_installer_un_paquet|installez les paquets]] **[[apt>qemu-user-static]]** et **[[apt>binfmt-support]]** |
| Cette librairie n'est pas installée (en tout cas pas si vous avez utilisé un compilateur externe à celui fourni dans les dépôts d'ubuntu) car nous ne nous trouvons pas sur un système de type arm. | Cette librairie n'est pas installée (en tout cas pas si vous avez utilisé un compilateur externe à celui fourni dans les dépôts d'ubuntu) car nous ne nous trouvons pas sur un système de type arm. |
| Trois solution s'offrent à vous | Trois solution s'offrent à vous |
| - Liste numérotée installer les librairies arm sur votre ordinateur. (ce que nous n'expliquerons pas ici) | - Installer les librairies arm sur votre ordinateur. (ce qui ne sera pas expliqué ici) |
| - Liste numérotée compiler le programme en static c'est à dire insérer les librairies dans l'exécutable et ainsi ne plus avoir de dépendances à ces librairies. | - Compiler le programme en static c'est à dire insérer les librairies dans l'exécutable et ainsi ne plus avoir de dépendances à ces librairies. |
| - Liste numérotée utiliser un linux (un système non lancé au démarrage mais présent sur une partition) de la même architecture que celle de l'exécutable et grâce à la commande chroot le "lancer" sous votre système hôte malgré la différence entre l'architecture hôte et celle de ce système. | - Utiliser un linux (un système non lancé au démarrage mais présent sur une partition) de la même architecture que celle de l'exécutable et grâce à la commande chroot le "lancer" sous votre système hôte malgré la différence entre l'architecture hôte et celle de ce système. |
| |
| ==== Faire une compilation static ==== | ==== Faire une compilation static ==== |
| pour sortir du chroot tapez exit | pour sortir du chroot tapez exit |
| |
| Lancer un programme "étranger" depuis un chroot | Lancer un programme "étranger" depuis un chroot |
| <code><arch>-gcc helloworld.c -o helloworld | <code><arch>-gcc helloworld.c -o helloworld |
| cp helloworld /<emplacement du chroot>/usr/bin/helloworld | cp helloworld /<emplacement du chroot>/usr/bin/helloworld |
| |
| (n'oubliez pas que les dépendances aux librairies doivent se trouver dans le système "chrooté") | (n'oubliez pas que les dépendances aux librairies doivent se trouver dans le système "chrooté") |
| | |
| | |
| | ==== Avec Proot à la place de chroot ! ==== |
| | Cela permet d'éviter d'utiliser les droits root et d'installer qemu-user-static et ainsi n'installer que qemu-user (plus petit). |
| | |
| | Tout d'abord [[:tutoriel:comment_installer_un_paquet|installez le paquet]] **[[apt>proot]]** (qui se prononce p-root pas proute :-) ) |
| | |
| | (pas de sudo) |
| | <code>proot -q /usr/bin/qemu-<arch> -r /<racines des librairies etc...>/ /usr/bin/helloworld</code> |
| | |
| | ===== Source ===== |
| | [[https://wiki.debian.org/QemuUserEmulation]] |
| | |
| | Contributeurs: [[:utilisateurs:amj|amj]] |