S'assurer juste que j'ai bien compris - j'appelle
ldd /path/to/executable
et il retourne "pas un exécutable dynamique". Cela signifie que cela ne dépend pas d'autres bibliothèques, n'est-ce pas? Si oui, cela signifie-t-il qu'il peut être transféré vers une autre boîte Ubuntu sans se soucier des dépendances?
Correct, mais il y a quelque chose à prendre en compte.
Depuis la page de manuel ldd
:
ldd ne fonctionne pas sur les bibliothèques partagées a.out.
ldd ne fonctionne pas avec certains programmes a.out extrêmement anciens qui ont été construits avant l’ajout du support ldd aux versions du compilateur. Si vous utilisez ldd sur l'un de ces programmes, le programme tentera de s'exécuter avec argc = 0 et les résultats seront imprévisibles.
@ Calmarius est correct, cela se produit si vous considérez un fichier exe 32 bits, sans même des bibliothèques 32 bits de base.
J'essaie de mettre à niveau mon système (une nouvelle installation d'Ubuntu 16.04, à partir de 12.04), je dois installer un ancien service propitiatoire 32 bits, avserver
, qui nécessite ia32-libs
(n'est plus disponible). Cela signifie que dpkg
et apt-get
ne sont pas satisfaits (quoi que je fasse, cela me fait appeler apt-get -f install
, et si j'exécute cette opération, il est impératif que je désinstalle le package de service) et mon service ne démarre pas.
Pour prouver qu'il ne reste que des bibliothèques 32 bits manquantes, j'ai monté mon ancien système (Ubuntu 12.04, avec ia32-libs
et les bibliothèques 32 bits) sur /sda2
. En s'assurant que /opt
(contenant mon binaire 32 bits) est monté dans /sda2/opt
, je peux chroot /sda2
et ldd
puis fonctionne comme prévu.
Pour résoudre ce problème, j'aurais pu installer manuellement tous les packages de bibliothèque dépendants avec: i386 (Arch). Cependant, j'ai décidé plutôt que d'essayer de comprendre quelles étaient mes dépendances, j'ai installé wine (principalement 32 bits, et donc installe les bibliothèques de base et une charge supplémentaire dont je n'ai pas vraiment besoin, mais ça ne me dérange pas).
Pour corriger dpkg
et apt-get
, j'ai édité /var/lib/dpkg/status
en recherchant le package pour mon service et supprimé ia32-libs
. dpkg
et apt-get
sont satisfaits
Cela fait, ldd
indique avec joie: - root@withnail:/opt/<service path># ldd avserver linux-gate.so.1 => (0xf77a6000) libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xf778f000) libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xf7772000) libuuid.so.1 => /lib/i386-linux-gnu/libuuid.so.1 (0xf776b000) libresolv.so.2 => /lib/i386-linux-gnu/libresolv.so.2 (0xf7752000) libcrypt.so.1 => /lib/i386-linux-gnu/libcrypt.so.1 (0xf7720000) libktssl.so.1.0.0 => /opt/<service path>/libktssl.so.1.0.0 (0xf76cb000) libktcrypto.so.1.0.0 => /opt/<service path>/libktcrypto.so.1.0.0 (0xf756b000) libktz.so.1 => /opt/<service path>/libktz.so.1 (0xf7558000) librt.so.1 => /lib/i386-linux-gnu/librt.so.1 (0xf754f000) libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xf73d8000) libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xf7383000) libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xf7366000) libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf71af000) /lib/ld-linux.so.2 (0x565b1000)