Plop,
Je viens de tomber sur une question inédite pour moi qui est celle du comportement de GCC face à une utilisation de symboles d'une bibliothèque "lointaine".
Je m'explique. Imaginez la situation suivante : prog -> liba -> libb, ce qui en français donne quelque chose du genre : le programme est liée à la bibliothèque A qui est elle même liée à la bibliothèque B.
Que doit-il se passer si le programme utilise un symbole de la libb ? (bien sûr, le "prototypage" est supposé exister, la problématique ne porte que sur l'édition des liens)
J'utilise ce genre de schémas sans problème depuis de nombreuses années et là, paf, avec un "gcc version 4.6.0 20110603 (Red Hat 4.6.0-10) (GCC)", j'ai un message qui m'explique le symbole est inconnu, mais qu'il semble exister dans la libb (merci Capt'ain Obvious !)
Est-ce un changement de comportement de la part de GCC ? Une modification spécifique à cette release du compilateur (Fedora 15) ? Quel est "l'avis" du standard sur ce point ?
Merci de vos commentaires.
# J'ai ma réponse ...
Posté par Xfennec (site web personnel) . Évalué à -1.
... il semblerait en effet que ce soit une modification spécifique de Fedora, depuis la F13 :
Les dépendances doivent maintenant êtres explicites à l'éditions des liens. C'est certes plus propre, mais j'ai tendance à trouver dommage le fait que ça casse la compatibilité.
[^] # Re: J'ai ma réponse ...
Posté par ymorin . Évalué à 3.
En fait, c'est un peu plus compliqué que çà... Supposons ceci :
libA
libA
dépend delibB
libB
définit le symbolesym_B
sym_B
-lA
( et pas-lB
! )L'ancien comportement était, dans l'ordre, avec arrêt au premier trouvé :
ld
tente de trouversym_B
dans les.o
libA
libB
L'inconvénient avec ce comportement, c'est que si
libA.so
est mis à jour et ne dépend plus delibB
, alors il y aura une erreur delink
à l'exécution.Le nouveau comportement :
ld
tente de trouversym_B
dans les .olibA
Donc, le symbole
sym_B
ne sera pas trouvé. Et c'est normal. Puisque le programme fait un appel explicite àsym_B
, il doit spécifier explicitement une dépendance àlibB
.Ce qui n'a pas changé :
libA
libA
dépend delibB
libB
Dans ce cas, l'édition de liens va réussir.
Hop,
Moi.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.