Comment faire pour résoudre “error while loading shared libraries” lorsque vous essayez d'exécuter un bras binaire avec qemu-arm?

Je suis sous Linux Mint 14 avec qemu, qemu-utilisateur, et le gnueabi de la chaîne d'installé. J'ai compilé test.c avec arm-linux-gnueabi-gcc test.c -o test.

Quand j'essaie de l'exécuter qemu-arm /usr/arm-linux-gnueabi/lib/ld-linux.so.3 test

J'obtiens un message d'erreur disant: test: error while loading shared libraries: test: cannot open shared object file: No such file or directory. L'exécution de qemu-arm test, comme je l'ai déjà essayé, donne /lib/ld-linux.so.3: No such file or directory

Cependant, le fichier existe et est accessible.

$ stat /usr/arm-linux-gnueabi/lib/ld-linux.so.3
  File: `/usr/arm-linux-gnueabi/lib/ld-linux.so.3' -> `ld-2.15.so'
  Size: 10          Blocks: 0          IO Block: 4096   symbolic link
Device: 801h/2049d  Inode: 4083308     Links: 1
Access: (0777/lrwxrwxrwx)  Uid: (    0/   root)   Gid: (    0/   root)
Access: 2013-04-22 16:19:48.090613901 -0700
Modify: 2012-09-21 08:31:29.000000000 -0700
Change: 2013-04-22 15:58:41.042542851 -0700
 Birth: -

Personne ne sait comment je peux faire qemu exécuter un bras de programme sans avoir à émuler un ensemble de bras de noyau Linux?

test.c est

#include <stdio.h>
int main() {
    printf("this had better work\n");
}

et file test est

test: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.31, BuildID[sha1]=0xf2e49db65394b77c77ee5b65b83c0cc9220cbfc0, not stripped
si en cours d'exécution sans un système d'exploitation, printf est la dernière chose que vous voulez faire, certainement pas le premier programme que vous voulez écrire pour ce système. allumer une led qui ne fait pas sens sur qemu, mais de brouillage d'un caractère vers le port série/uart à la borne serial est généralement quelque chose de trivial. Aussi, vous voulez commencer avec un programme d'assemblée de ne pas C que le code d'amorçage est pas aussi trivial que vous avez à faire assurez-vous de comprendre la topographie de la mémoire, où le programme est chargé, etc.
Cela vient du bras de bibliothèques n'étant pas installé en tant que système de bibliothèques (même s'ils sont installés en tant que cible des bibliothèques pour le cross-compilateur). Si la distribution prend en charge, alors vous pouvez installer bras comme un multiarch cible (comme x86 et x86_64 sont pris en charge simultanément). Dans Ubuntu parler c'est quelque chose comme apt-add-architecture arm && apt-get install libc6:arm. Je ne sais pas la menthe. Juste compiler avec -static si vous ne voulez pas de penser à elle.

OriginalL'auteur David | 2013-04-23