Connaitre les dépendences d'une librairie sous linux ?

Répondre
Partager Rechercher
Jolien laborentin, bonsoir.

Voila j'ai une shared lib que je n'arrive pas "utiliser" sur machine alors que je peux sur un autre.
Je sais que sous windows si une lib A necessite une autre lib B (absente), l'erreur donnera juste l'impossibilité d'utiliser la lib A sans mentioner la lib B. Je ne sais pas si c'est idem sous nux, mais je soupçonne dépendance manquante sous le linux de la 2eme machine.
J'aurais donc voulu savoir comment je pouvais connaitre les dépendance d'une shared lib sous linux ?
Dans Synaptic dans les propriétés du paquet tu peux voir les différentes dépendances (ascendantes et descendantes). Mais normalement quand tu installes ton truc ou que tu le compiles t'as le droit à un message d'erreur si il te manque quelque chose.

Ou alors j'ai pas compris ton problème.
Je n'ai pas installé la lib, je ne peux pas je veux faire une version "portable" d'une appli.
J'ai installé une premiere fois la lib sur ma machine, copié la lib dont j'avais besoin, puis ai désinstallé la lib. Mais je pense que les dépendence ne sont pas partie avec (j'en suis sur même). Donc ca marche sur ma machine qui possède ces dep, mais pas sur les autres qui ne les ont pas (enfin pour peu que mon probleme vienne de ce manque de dep ^^)
Citation :
Publié par Panzerjo MILKS
Jolien laborentin, bonsoir.

Voila j'ai une shared lib que je n'arrive pas "utiliser" sur machine alors que je peux sur un autre.
Je sais que sous windows si une lib A necessite une autre lib B (absente), l'erreur donnera juste l'impossibilité d'utiliser la lib A sans mentioner la lib B. Je ne sais pas si c'est idem sous nux, mais je soupçonne dépendance manquante sous le linux de la 2eme machine.
J'aurais donc voulu savoir comment je pouvais connaitre les dépendance d'une shared lib sous linux ?
De quel distro s'agit-il?
Est -il question de la même distro sur les 2 machines?
Sont elles toutes les 2 en 32bits ou en 64bits?
__________________
http://steamsignature.com/classic-76561197966241593.png
Bah déjà quelle distro ? Parce que pacman (Arch) permet facilement de trouver les dépendances d'un package.

Après quelques recherches :
arch pacman -Qi
redhat/fedora yum resolvedep
debian/ubuntu apt-cache rdepends
old suse rug what-requires
gentoo equery depends
Citation :
Publié par Lango
Code:
ldd libtoto.so
Cela dit si tu as installé la bibliothèque sans trifouiller, y’a peu de chances que ça soit ça…

Quelle est l’erreur que tu reçois quand tu lances ton exécutable lié à cette bibliothèque ?
Yep ldd est le meilleur outil pour ça sinon, sinon tu peux le voir avec strace ( mais pas tout le temps ).
Citation :
eno@me:/lib$ ldd libnss_dns-2.12.1.so
linux-vdso.so.1 => (0x00007ffffbfff000)
libresolv.so.2 => /lib/libresolv.so.2 (0x00007f9f2db0b000)
libc.so.6 => /lib/libc.so.6 (0x00007f9f2d788000)
/lib64/ld-linux-x86-64.so.2 (0x00007f9f2df4a000)]
Et aussi:
Citation :
eno@me:/lib$ file libnss_dns-2.12.1.so
libnss_dns-2.12.1.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, stripped
Nikel merci beaucoup c'est exactement ce qu'il me fallait ^^

Sinon les deux distri sont en Ubuntu 64. L'une est ma machine, et l'autre est un serveur de prod donc je ne peux pas installer les lib comme je veux dessus. Et il s'agit d'une librairie de dev (google protobuffer), qui permet de génerer du code multi langage. A l'execution de ce script j'ai le message :
Code:
libprotobuf.so.7: cannot open shared object file: No such file or directory
Bien que cette lib soit présente, et le LD_PATH correctement configuré. D'ou mes soupsons de dep à cette lib manquante.
C'est sur le serveur ou ta machine qu'il y a le problème? C'est quelle version de Ubuntu? Parce que j'ai cette lib d'installée aussi sauf que c'est pas la même version :
Citation :
/usr/lib/libprotobuf.so.6
/usr/lib/libprotobuf.so.6.0.0
/usr/share/doc/libprotobuf6
/usr/share/doc/libprotobuf6/changelog.Debian.gz
/usr/share/doc/libprotobuf6/changelog.gz
/usr/share/doc/libprotobuf6/copyright
/var/lib/dpkg/info/libprotobuf6.list
/var/lib/dpkg/info/libprotobuf6.md5sums
/var/lib/dpkg/info/libprotobuf6.postinst
/var/lib/dpkg/info/libprotobuf6.postrm
/var/lib/dpkg/info/libprotobuf6.shlibs
En plus sur Ubuntu server c'est une LTS donc pas une version plus récente. ( soit 8.04 soit 10.04 ), du coup tu trouvera pas cette lib en version 7 sauf si tu l'a compile à la main.
Citation :
apt-cache show libprotobuf6
Package: libprotobuf6
Priority: extra
Section: devel
Installed-Size: 1000
Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Iustin Pop <iustin@Debian.org>
Architecture: amd64
Source: protobuf
Version: 2.3.0-2ubuntu1
Depends: libc6 (>= 2.4), libgcc1 (>= 1:4.1.1), libstdc++6 (>= 4.3), zlib1g (>= 1:1.1.4)
Filename: pool/main/p/protobuf/libprotobuf6_2.3.0-2ubuntu1_amd64.deb
Size: 354500
MD5sum: 8bac30da6f21e6e1f954dcd8c44962a9
SHA1: cddc32be12124c602bd283c61620f72b59dfb2e1
SHA256: 72315f2bfc10cb5c1e2c27c8e3205c53d06c42a2eb44a731995012f43b2b3d5e
Description: protocol buffers C++ library
Protocol buffers are a flexible, efficient, automated mechanism for
serializing structured data - similar to XML, but smaller, faster, and
simpler. You define how you want your data to be structured once, then you can
use special generated source code to easily write and read your structured
data to and from a variety of data streams and using a variety of languages.
You can even update your data structure without breaking deployed programs
that are compiled against the "old" format.
.
Google uses Protocol Buffers for almost all of its internal RPC protocols and
file formats.
.
This package contains the runtime library needed for C++ applications.
Homepage: http://code.google.com/p/protobuf/
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Origin: Ubuntu
Supported: 18m
Task: ubuntu-desktop, ubuntu-uec-live, edubuntu-desktop, edubuntu-uec-live, ubuntu-netbook
Citation :
Publié par Eno
C'est sur le serveur ou ta machine qu'il y a le problème? C'est quelle version de Ubuntu? Parce que j'ai cette lib d'installée aussi sauf que c'est pas la même version :

En plus sur Ubuntu server c'est une LTS donc pas une version plus récente. ( soit 8.04 soit 10.04 ), du coup tu trouvera pas cette lib en version 7 sauf si tu l'a compile à la main.
Ca marche sur ma machine, et ca ne marche pas sur le serveur. Et c est la toute dernière version que j'ai compilé moi même, elle date d'il y a quelque semaines. Mais j'ai rapatrie cette lib dans mon projet, et je spécifie bien le path :/

Citation :
C'est pas LD_LIBRARY_PATH la variable pour les lib dynamique ?
Sisi pardon, j ai juste eu la flemme de tout mettre
C'est encore plus barge que ca, à la compilation (et non pas à la génération de code) cette lib est toujours nécessaire, mais est cette fois trouvée et utilisée.

Bon, j'ai crée un ticket pour ce problème, et au lieu de faire générer les fichiers par le makefile, ils seront directement dans le package de base Je reviendrais la dessus plus tard je pense ^^

Merci bien de vos conseils en tout cas.
Répondre
  • »
 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés