Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

ldd : no version information available

14 réponses
Avatar
Doug713705
Bonjour à toutes, tous,

Sur un système 64 bits (slackware-current à jour) qui dispose du
nécessaire pour faire fonctionner des applications 32 bits, j'essaye
de faire tourner une application 32 bits mais celle ci refuse de
fonctionner à cause d'n problème de dépendence sur lequel je m'arrache
les cheveux depuis plusieurs jours.

Si je fais un simple ldd sur l'application, j'ai ce message qui
apparait :

$ ldd application
./application: /usr/lib/libcurl.so.4: no version information available
(required by ./application)

Le même message apparaît que je tente un LD_PRELOAD ou que je positionne
un LD_LIBRARY_PATH sur le répertoire contenant les librairies 32 bits
(/usr/lib)

$ LD_PRELOAD=/usr/lib/libcurl.so.4.2.0 ldd application
ERROR: ld.so: object '/usr/lib/libcurl.so.4.2.0' from LD_PRELOAD cannot be preloaded: ignored.
ERROR: ld.so: object '/usr/lib/libcurl.so.4.2.0' from LD_PRELOAD cannot be preloaded: ignored.
./application: /usr/lib/libcurl.so.4.2.0: no version information available (required by ./application)

Les autres libraries 32 bits ne semblent pas poser de problèmes et sont
vues normalement par ldd.

ldconfig voit bien les deux versions de libcurl et semble faire
correctement la différence.

# ldconfig -p | grep curl
libcurl.so.4 (libc6,x86-64) => /usr/lib64/libcurl.so.4
libcurl.so.4 (libc6) => /usr/lib/libcurl.so.4
libcurl.so (libc6,x86-64) => /usr/lib64/libcurl.so
libcurl.so (libc6) => /usr/lib/libcurl.so

J'ai lu que ce message d'erreur était souvent du à une différence de
version entre la libraires attendue par le binaire et celle du système
(binaire > système) mais celame semble étrange.

Je n'ai pas le code source de cette application mais j'ai le developpeur
(qui ne comprend pas vraiement l'origine du problème) à portée d'IRC.

Si une bonne âme arrivait à m'orienter dans ma compréhension de ce bins,
elle en serait remerciée.

A votre bon coeur.
--
@+
Doug - Linux user #307925 - Slackware64 roulaize ;-)
[ Plus ou moins avec une chance de peut-être ]

10 réponses

1 2
Avatar
Luc.Habert.00__arjf
Doug713705 :

Je n'ai pas le code source de cette application mais j'ai le developpeur
(qui ne comprend pas vraiement l'origine du problème) à portée d'IRC.



Bah demande lui de t'envoyer son libcurl.so.4 à lui...

Désolé de ne pas pouvoir répondre sur le fond, le ld.so gnu s'est
rempli de features emmerdantes, incompréhensibles et pas documentées, ces
dernières années.
Avatar
appzer0
On 06/03/2010 23:20, Doug713705 wrote:

Les autres libraries 32 bits ne semblent pas poser de problèmes et sont
vues normalement par ldd.

ldconfig voit bien les deux versions de libcurl et semble faire
correctement la différence.

# ldconfig -p | grep curl
libcurl.so.4 (libc6,x86-64) => /usr/lib64/libcurl.so.4
libcurl.so.4 (libc6) => /usr/lib/libcurl.so.4
libcurl.so (libc6,x86-64) => /usr/lib64/libcurl.so
libcurl.so (libc6) => /usr/lib/libcurl.so

J'ai lu que ce message d'erreur était souvent du à une différence de
version entre la libraires attendue par le binaire et celle du système
(binaire> système) mais celame semble étrange.



Hmm je dis peut-être n'importe quoi mais ta libcurl.so.4 pointe-t-elle
vers une libcurl.so.4.quelquechose ?

Sur ma Slackware64 :

:~$ ls -l /usr/lib64/libcurl*
-rw-r--r-- 1 root root 536846 2009-08-13 05:36 /usr/lib64/libcurl.a
-rwxr-xr-x 1 root root 1041 2009-08-13 05:36 /usr/lib64/libcurl.la*
lrwxrwxrwx 1 root root 16 2009-12-31 19:58 /usr/lib64/libcurl.so ->
libcurl.so.4.1.1*
lrwxrwxrwx 1 root root 16 2009-12-31 19:58 /usr/lib64/libcurl.so.4
-> libcurl.so.4.1.1*
-rwxr-xr-x 1 root root 297184 2009-08-13 05:36 /usr/lib64/libcurl.so.4.1.1*

appzer0
Avatar
Nicolas George
Doug713705 wrote in message <hmukfu$1klc$:
$ ldd application



Essaie de regarder la sortie d'objdump -p.
Avatar
Doug713705
Dans fr.comp.os.linux.configuration appzer0 nous expliquait:

Hmm je dis peut-être n'importe quoi mais ta libcurl.so.4 pointe-t-elle
vers une libcurl.so.4.quelquechose ?

Sur ma Slackware64 :

:~$ ls -l /usr/lib64/libcurl*
-rw-r--r-- 1 root root 536846 2009-08-13 05:36 /usr/lib64/libcurl.a
-rwxr-xr-x 1 root root 1041 2009-08-13 05:36 /usr/lib64/libcurl.la*
lrwxrwxrwx 1 root root 16 2009-12-31 19:58 /usr/lib64/libcurl.so ->
libcurl.so.4.1.1*
lrwxrwxrwx 1 root root 16 2009-12-31 19:58 /usr/lib64/libcurl.so.4
-> libcurl.so.4.1.1*
-rwxr-xr-x 1 root root 297184 2009-08-13 05:36 /usr/lib64/libcurl.so.4.1.1*




Oui, pas de problème là dessus.
J'ai désinstallé, réinstallé, surinstallé tout ce que qui touche de prêt
ou de loin à libcurl.

D'ailleurs ma version de libcurl est plus récente (4.2.0) que la tienne
;-) mais j'ai également essayé la 4.1.1 sans succès.
--
@+
Doug - Linux user #307925 - Slackware64 roulaize ;-)
[ Plus ou moins avec une chance de peut-être ]
Avatar
Doug713705
Dans fr.comp.os.linux.configuration Luc Habert nous expliquait:

Je n'ai pas le code source de cette application mais j'ai le developpeur
(qui ne comprend pas vraiement l'origine du problème) à portée d'IRC.



Bah demande lui de t'envoyer son libcurl.so.4 à lui...



Je ne suis pas contre mais j'aimerai aussi comprendre le pourquoi de la
chose.

--
@+
Doug - Linux user #307925 - Slackware64 roulaize ;-)
[ Plus ou moins avec une chance de peut-être ]
Avatar
Doug713705
Dans fr.comp.os.linux.configuration Nicolas George nous expliquait:

Doug713705 wrote in message <hmukfu$1klc$:
$ ldd application



Essaie de regarder la sortie d'objdump -p.



Ca sort tout un tas de bazar que je ne sais pas interpréter et que je
copie bêtement ici :

file format elf32-i386

Program Header:
PHDR off 0x00000034 vaddr 0x08048034 paddr 0x08048034 align 2**2
filesz 0x00000100 memsz 0x00000100 flags r-x
INTERP off 0x00000154 vaddr 0x08048154 paddr 0x08048154 align 2**0
filesz 0x00000013 memsz 0x00000013 flags r--
LOAD off 0x00000000 vaddr 0x08048000 paddr 0x08048000 align 2**12
filesz 0x00209df6 memsz 0x00209df6 flags r-x
LOAD off 0x0020ad1c vaddr 0x08252d1c paddr 0x08252d1c align 2**12
filesz 0x00002c48 memsz 0x00004750 flags rw-
DYNAMIC off 0x0020ae88 vaddr 0x08252e88 paddr 0x08252e88 align 2**2
filesz 0x00000168 memsz 0x00000168 flags rw-
NOTE off 0x00000188 vaddr 0x08048188 paddr 0x08048188 align 2**2
filesz 0x00000024 memsz 0x00000024 flags r--
EH_FRAME off 0x001fcad4 vaddr 0x08244ad4 paddr 0x08244ad4 align 2**2
filesz 0x00001fe4 memsz 0x00001fe4 flags r--
STACK off 0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**2
filesz 0x00000000 memsz 0x00000000 flags rw-

Dynamic Section:
NEEDED libgd.so.2
NEEDED libpthread.so.0
NEEDED libjpeg.so.62
NEEDED libgmp.so.3
NEEDED libfreetype.so.6
NEEDED libopenal.so.1
NEEDED libalut.so.0
NEEDED libpng12.so.0
NEEDED libGLU.so.1
NEEDED libGL.so.1
NEEDED libXmu.so.6
NEEDED libXext.so.6
NEEDED libX11.so.6
NEEDED libXxf86vm.so.1
NEEDED libcurl.so.4
NEEDED libgeos_c.so.1
NEEDED libstdc++.so.6
NEEDED libm.so.6
NEEDED libgcc_s.so.1
NEEDED libc.so.6
INIT 0x08054490
FINI 0x08221abc
HASH 0x080481ac
GNU_HASH 0x0804995c
STRTAB 0x0804e250
SYMTAB 0x0804a440
STRSZ 0x000044b3
SYMENT 0x00000010
DEBUG 0x00000000
PLTGOT 0x08252ff4
PLTRELSZ 0x000013b0
PLTREL 0x00000011
JMPREL 0x080530e0
REL 0x08053078
RELSZ 0x00000068
RELENT 0x00000008
VERNEED 0x08052ec8
VERNEEDNUM 0x00000007
VERSYM 0x08052704

Version References:
required from libgcc_s.so.1:
0x0b792650 0x00 18 GCC_3.0
required from libpthread.so.0:
0x09691972 0x00 15 GLIBC_2.3.2
0x0d696911 0x00 11 GLIBC_2.1
0x0d696910 0x00 08 GLIBC_2.0
required from libcurl.so.4:
0x044a42e3 0x00 07 CURL_OPENSSL_3
required from libm.so.6:
0x0d696911 0x00 13 GLIBC_2.1
0x0d696910 0x00 06 GLIBC_2.0
required from libc.so.6:
0x0d696912 0x00 21 GLIBC_2.2
0x09691f73 0x00 20 GLIBC_2.1.3
0x0d696911 0x00 17 GLIBC_2.1
0x0d696914 0x00 14 GLIBC_2.4
0x09691974 0x00 12 GLIBC_2.3.4
0x0d696917 0x00 10 GLIBC_2.7
0x0d696913 0x00 09 GLIBC_2.3
0x0d696910 0x00 04 GLIBC_2.0
required from libpng12.so.0:
0x052a4870 0x00 03 PNG12_0
required from libstdc++.so.6:
0x02297f89 0x00 19 GLIBCXX_3.4.9
0x0297f861 0x00 16 GLIBCXX_3.4.11
0x056bafd3 0x00 05 CXXABI_1.3
0x08922974 0x00 02 GLIBCXX_3.4


--
@+
Doug - Linux user #307925 - Slackware64 roulaize ;-)
[ Plus ou moins avec une chance de peut-être ]
Avatar
Nicolas George
Doug713705 wrote in message <hn0huf$1t9q$:
file format elf32-i386



Ça te dit que c'est un binaire pour x86 32 bits.

Program Header:
PHDR off 0x00000034 vaddr 0x08048034 paddr 0x08048034 align 2**2
filesz 0x00000100 memsz 0x00000100 flags r-x
INTERP off 0x00000154 vaddr 0x08048154 paddr 0x08048154 align 2**0
filesz 0x00000013 memsz 0x00000013 flags r--
LOAD off 0x00000000 vaddr 0x08048000 paddr 0x08048000 align 2**12
filesz 0x00209df6 memsz 0x00209df6 flags r-x
LOAD off 0x0020ad1c vaddr 0x08252d1c paddr 0x08252d1c align 2**12
filesz 0x00002c48 memsz 0x00004750 flags rw-
DYNAMIC off 0x0020ae88 vaddr 0x08252e88 paddr 0x08252e88 align 2**2
filesz 0x00000168 memsz 0x00000168 flags rw-
NOTE off 0x00000188 vaddr 0x08048188 paddr 0x08048188 align 2**2
filesz 0x00000024 memsz 0x00000024 flags r--
EH_FRAME off 0x001fcad4 vaddr 0x08244ad4 paddr 0x08244ad4 align 2**2
filesz 0x00001fe4 memsz 0x00001fe4 flags r--
STACK off 0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**2
filesz 0x00000000 memsz 0x00000000 flags rw-



La position dans le fichier, l'adresse voulue en mémoire et les options des
différentes parties du binaire.

Dynamic Section:
NEEDED libgd.so.2
NEEDED libpthread.so.0
NEEDED libjpeg.so.62
NEEDED libgmp.so.3
NEEDED libfreetype.so.6
NEEDED libopenal.so.1
NEEDED libalut.so.0
NEEDED libpng12.so.0
NEEDED libGLU.so.1
NEEDED libGL.so.1
NEEDED libXmu.so.6
NEEDED libXext.so.6
NEEDED libX11.so.6
NEEDED libXxf86vm.so.1
NEEDED libcurl.so.4
NEEDED libgeos_c.so.1
NEEDED libstdc++.so.6
NEEDED libm.so.6
NEEDED libgcc_s.so.1
NEEDED libc.so.6



La liste des bibliothèques partagées requises.

INIT 0x08054490
FINI 0x08221abc
HASH 0x080481ac
GNU_HASH 0x0804995c
STRTAB 0x0804e250
SYMTAB 0x0804a440
STRSZ 0x000044b3
SYMENT 0x00000010
DEBUG 0x00000000
PLTGOT 0x08252ff4
PLTRELSZ 0x000013b0
PLTREL 0x00000011
JMPREL 0x080530e0
REL 0x08053078
RELSZ 0x00000068
RELENT 0x00000008
VERNEED 0x08052ec8
VERNEEDNUM 0x00000007
VERSYM 0x08052704



Quelques options de chargement.

Version References:
required from libgcc_s.so.1:
0x0b792650 0x00 18 GCC_3.0
required from libpthread.so.0:
0x09691972 0x00 15 GLIBC_2.3.2
0x0d696911 0x00 11 GLIBC_2.1
0x0d696910 0x00 08 GLIBC_2.0



Des dépendances sur des versions précises de bibliothèques. Dont en
particulier :

required from libcurl.so.4:
0x044a42e3 0x00 07 CURL_OPENSSL_3



Si je fais objdump -p sur ma libcurl.so.4 (Debian Testing à jour),
j'obtiens, entre autres :

# Version definitions:
# 1 0x01 0x0fda2cd4 libcurl.so.4
# 2 0x00 0x04cd889e HIDDEN
# 3 0x00 0x044a42e3 CURL_OPENSSL_3

Donc elle conviendrait. Qu'est-ce que ça donne sur la tienne ? Montre aussi
les NEEDED, d'ailleurs, ça peut éclairer.
Avatar
Doug713705
Dans fr.comp.os.linux.configuration Nicolas George nous expliquait:

Merci pour les explications.

Des dépendances sur des versions précises de bibliothèques. Dont en
particulier :

required from libcurl.so.4:
0x044a42e3 0x00 07 CURL_OPENSSL_3





Ca j'avais vu et je subdore que c'est par là que ça pèche.

Si je fais objdump -p sur ma libcurl.so.4 (Debian Testing à jour),
j'obtiens, entre autres :

# Version definitions:
# 1 0x01 0x0fda2cd4 libcurl.so.4
# 2 0x00 0x04cd889e HIDDEN
# 3 0x00 0x044a42e3 CURL_OPENSSL_3

Donc elle conviendrait. Qu'est-ce que ça donne sur la tienne ? Montre aussi
les NEEDED, d'ailleurs, ça peut éclairer.




objdump -p /usr/lib/libcurl.so.4

/usr/lib/libcurl.so.4: file format elf32-i386

Dynamic Section:
NEEDED libidn.so.11
NEEDED libldap-2.4.so.2
NEEDED librt.so.1
NEEDED libssl.so.0
NEEDED libcrypto.so.0
NEEDED libdl.so.2
NEEDED libz.so.1
NEEDED libc.so.6
SONAME libcurl.so.4

Version References:
required from librt.so.1:
0x0d696912 0x00 07 GLIBC_2.2
required from libc.so.6:
0x09691f73 0x00 09 GLIBC_2.1.3
0x09691974 0x00 08 GLIBC_2.3.4
0x0d696913 0x00 06 GLIBC_2.3
0x0d696912 0x00 05 GLIBC_2.2
0x0d696917 0x00 04 GLIBC_2.7
0x0d696911 0x00 03 GLIBC_2.1
0x0d696910 0x00 02 GLIBC_2.0

Là où ça devient drole c'est que je n'ai pas de section "version
definitions", ce qui semble correspondre au message d'erreur initial (no
version information available).

Pour info :
- l'application en question est compilée au départ sur Ubuntu
9.10 (équivalent debian testing ?).
- Le problème est le même sur une slackware 32 bits pure (de toutes
façons, les paquets 32 bits pour une slack multiib sont bêtement ceux de
la slack 32 bits).

J'ose soumettre 4 hypothèses à ta sagacité :
- La version debian/ubuntu est patchée au point que ça ne correspond en
rien à un autre système (même pas j'y crois trop mais mon
anti-debianisme primaire refait surface dans ces moments là ;-) )
- Les options de compilation de la version debian/ubuntu sont
suffisement différentes de celle de la slackware pour que ça mette un
bazar pas possible (probable mais bon, ça me paraît gros).
- Un bug chez Slackware ? C'est vrai, pourquoi je n'ai pas
d'informations de version sur libcurl ?
- Les 3 en même temps !!!

Merci pour ton aide.
--
@+
Doug - Linux user #307925 - Slackware64 roulaize ;-)
[ Plus ou moins avec une chance de peut-être ]
Avatar
Nicolas George
Doug713705 wrote in message <hn0rhe$2dua$:
Là où ça devient drole c'est que je n'ai pas de section "version
definitions", ce qui semble correspondre au message d'erreur initial (no
version information available).

- La version debian/ubuntu est patchée au point que ça ne correspond en
rien à un autre système



Le symbol versionning est effectivement un patch Debian.

Sans, tu aurais fait tourner ton programme avec une libcurl compilée avec
des options incompatible (GnuTLS au lieu d'OpenSSL) et donc risqué des
segfaults implévisibles.
Avatar
Doug713705
Dans fr.comp.os.linux.configuration Nicolas George nous expliquait:

Là où ça devient drole c'est que je n'ai pas de section "version
definitions", ce qui semble correspondre au message d'erreur initial (no
version information available).



- La version debian/ubuntu est patchée au point que ça ne correspond en
rien à un autre système



Le symbol versionning est effectivement un patch Debian.

Sans, tu aurais fait tourner ton programme avec une libcurl compilée avec
des options incompatible (GnuTLS au lieu d'OpenSSL) et donc risqué des
segfaults imprévisibles.



Rhââ, et on peut se sortir de là avec élégance ou suis-je condamné à
récupérer une libcurl ubuntu et probablement toutes ses dépendences ?

Dois-je signaler à l'auteur de l'application qu'il serait plus sage de
compiler sur une autre machine équipée d'un autre système que Debian ?

Ca me parait complètement fou, windows-like même (!) mais je garde
encore l'espoir de t'avoir mal compris.

--
@+
Doug - Linux user #307925 - Slackware64 roulaize ;-)
[ Plus ou moins avec une chance de peut-être ]
1 2