Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
| utilisateurs:amj:brouillons:qemu-user [Le 18/01/2014, 19:21] amj [Utilisation de qemu-user avec chroot] | utilisateurs:amj:brouillons:qemu-user [Le 11/09/2022, 13:14] (Version actuelle) moths-art 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) | ||
|---|---|---|---|
| Ligne 7: | Ligne 7: | ||
| 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]]** | ||
| Ligne 29: | Ligne 29: | ||
| 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 | ||
| - | - 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) | 
| - 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. | ||
| - 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. | ||
| Ligne 60: | Ligne 60: | ||
| 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 | ||
| Ligne 67: | Ligne 67: | ||
| (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 ===== | ===== Source ===== | ||