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 ===== |