web-dev-qa-db-fra.com

Est-ce qu'un fichier rapporté comme "non un exécutable dynamique" par 'ldd' dépend d'autres bibliothèques?

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?

9
Jason

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.

3
Eric Carvalho

@ 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)

0
sibaz