Comment puis-je trouver les ELFE de la dépendance n'est pas satisfaite?
J'ai construit un test ELFE de programme à l'aide de la LSB SDK (remarque que ma question n'est pas spécifique à LSB):
$ /opt/lsb/bin/lsbcc tst.c
$ ls -l a.out
-rwxr-xr-x 1 math math 10791 2009-10-13 20:13 a.out
$ file a.out
a.out: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, not stripped
Mais je n'arrive pas à le lancer (oui, je vous assure que le fichier est dans le répertoire...):
$ ./a.out
bash: ./a.out: No such file or directory
$ uname -a
Linux math 2.6.28-15-generic #52-Ubuntu SMP Wed Sep 9 10:48:52 UTC 2009 x86_64 GNU/Linux
Je pense qu'il est un ELFE de la dépendance qui n'est pas répondre, mais je ne sais pas comment le trouver. Est-il un outil similaire à la commande ldd pour les bibliothèques qui peuvent être utilisés pour trouvé le chaînon manquant?
Je ne pense pas que c'est lié à la 2.6.15/2.6.28-15 différence, parce que le LSB est un compilateur de travail:
$ file /opt/lsb/bin/lsbcc
/opt/lsb/bin/lsbcc: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.4, not stripped
Juste au cas où, voici l'ELFE de la partie dynamique d'un.:
0x0000000000000001 (NEEDED) Shared library: [libpthread.so.0]
0x0000000000000001 (NEEDED) Shared library: [libm.so.6]
0x0000000000000001 (NEEDED) Shared library: [libc.so.6]
0x000000000000000c (INIT) 0x400428
0x000000000000000d (FINI) 0x400638
0x0000000000000004 (HASH) 0x400278
0x0000000000000005 (STRTAB) 0x400350
0x0000000000000006 (SYMTAB) 0x4002a8
0x000000000000000a (STRSZ) 121 (bytes)
0x000000000000000b (SYMENT) 24 (bytes)
0x0000000000000015 (DEBUG) 0x0
0x0000000000000003 (PLTGOT) 0x600fe8
0x0000000000000002 (PLTRELSZ) 24 (bytes)
0x0000000000000014 (PLTREL) RELA
0x0000000000000017 (JMPREL) 0x400410
0x0000000000000007 (RELA) 0x4003f8
0x0000000000000008 (RELASZ) 24 (bytes)
0x0000000000000009 (RELAENT) 24 (bytes)
0x000000006ffffffe (VERNEED) 0x4003d8
0x000000006fffffff (VERNEEDNUM) 1
0x000000006ffffff0 (VERSYM) 0x4003ca
0x0000000000000000 (NULL) 0x0
OriginalL'auteur math | 2009-10-13
Vous devez vous connecter pour publier un commentaire.
Cela ressemble à ce qui se passe lorsque l'ELFE interprète est manquant.
S'assurer que
/lib/ld-lsb.so.2
(ou similaire; varie selon le LSB de la version et de l'architecture) existe.ldd
etreadelf -l
seront capables de montrer de l'ELFE interprète votre exécutable demande.(
lsbcc
(ou quelque chose dans le bit de poids faible de la chaîne) remplace le système par défaut de/lib/ld-linux.so.2
, probablement en passant-Wl,--dynamic-linker=/lib/ld-lsb.so.2
pour le compilateur, pour des raisons que je pense sont plutôt idiot (Glibc a toujours fourni assez excellente compatibilité ascendante ici), mais il vous en avez.)OriginalL'auteur ephemient