Ce que les bibliothèques sont nécessaires pour ce binaire à exécuter?
Basé sur Linux (Ubuntu 11.10)
Avant que mon ordinateur est tombé en panne, j'ai eu un binaire sur mon ordinateur: ./program
qui m'a été donnée sans la source. Ce fichier exécuté juste fine. Quand mon disque dur a échoué, j'ai commencé avec une nouvelle installation, et a essayé de courir ce binaire sur le même ordinateur. Il échoue désormais avec:
bash: ./program: cannot execute binary file
De course ldd
sur le fichier donne un peu plus d'informations:
/usr/bin/ldd: line 161: /lib64/ld-linux-x86-64.so.2: cannot execute binary file
not a dynamic executable
J'ai un deuxième ordinateur où le binaire s'exécute et ldd
donne la sortie:
./program:
linux-vdso.so.1 => (0x00007fffdad5e000)
libz.so.1 => /lib64/libz.so.1 (0x00000039a1400000)
libstdc++.so.6 => /usr/local/gcc/gcc-4.5.1/lib64/libstdc++.so.6 (0x00007fce82c7a000)
libm.so.6 => /lib64/libm.so.6 (0x00007fce829f6000)
libgcc_s.so.1 => /usr/local/gcc/gcc-4.5.1/lib64/libgcc_s.so.1 (0x00007fce827e1000)
libc.so.6 => /lib64/libc.so.6 (0x00007fce82452000)
/lib64/ld-linux-x86-64.so.2 (0x00007fce82f7f000)
Est-il une manière que je peux dire à ce qui est nécessaire afin que je puisse obtenir mon programme fonctionne à nouveau? Je sais que tout ce qui est installé avant le crash a été fait avec apt-get
donc je ne pense pas que cela exige quelque chose d'unique qui n'est pas dans le référentiel.
Localisée question?
Je dois admettre que ce spécifiques question peut être particulier pour moi, - mais la question reste toujours dans le sens général. Donnée binaire seulement, comment voulez-vous déterminer qui bibliothèques dont il a besoin pour fonctionner?
nm -u program
pour voir ce que les symboles non résolus?sur chaque ordinateur, il y a une tonne d'entrées, mais dans les deux cas, un
diff
montre qu'ils sont de la même
OriginalL'auteur Hooked | 2012-02-27
Vous devez vous connecter pour publier un commentaire.
Exécuter
file
avec le programme en tant qu'argument sur l'ordinateur oùldd
œuvres. Il vous dira si le binaire est construit pour 32 ou 64 bits. Vous avez probablement installer les bibliothèques de compatibilité 32 bits avant d'exécuter, sur debian/ubuntu, cela s'appelleia32-libs
.file
donneprogram: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.4, not stripped
de sorte qu'il semble être construit pour ma machine 64 bits (les deux machines sont en 64 bits).OK. Avez-vous un fichier nommé /lib64/ld-linux-x86-64..2 ? Avez-vous un avec l'autre version à la fin? Essayez de créer un lien symbolique pointant vers /lib64/ld-x.y.donc
Ce peut être le problème, alors que j'ai
/lib64/ld-linux-x86-64.so.2
, je n'ai pas de fichierld-x.y.so
, ni Google me dire ce que cela appartient à./lib64/x86_64-linux-gnu/ld-2.13.donc, et /lib64/ld-linux-x86-64..2 provient de la
libc6
paquet deb sur ma machine ubuntu.Trouvé cette friandise enterrés à l'intérieur d'un fichier PDF: Pour une installation 32 bits, support d'exécution, Exécutez les commandes suivantes: - $
sudo apt-get update
- $sudo apt-get install ia32-libs
Noter que ce installe de plus de 200 paquets, et dure plusieurs minutes. En faisant cela m'a permis de fonctionner sous Linux 64 bits:ldd
sur, par exemple, la NVIDIAnvflash
binaire de la source qui n'est pas public.OriginalL'auteur Erik Ekman