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 :
libAlibAdépend delibBlibBdéfinit le symbolesym_Bsym_B-lA( et pas-lB! )L'ancien comportement était, dans l'ordre, avec arrêt au premier trouvé :
ldtente de trouversym_Bdans les.olibAlibBL'inconvénient avec ce comportement, c'est que si
libA.soest mis à jour et ne dépend plus delibB, alors il y aura une erreur delinkà l'exécution.Le nouveau comportement :
ldtente de trouversym_Bdans les .olibADonc, le symbole
sym_Bne 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é :
libAlibAdépend delibBlibBDans 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.