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é.
En fait, c'est un peu plus compliqué que çà... Supposons ceci :
le programme dépend de libA
la libA dépend de libB
la libB définit le symbole sym_B
le programme appelle directement le symbole sym_B
le programme est lié avec -lA ( et pas -lB ! )
L'ancien comportement était, dans l'ordre, avec arrêt au premier trouvé :
ld tente de trouver sym_B dans les .o
puis regarde dans la première couche de dépendances, libA
puis descend d'un cran dans les dépendances, libB
L'inconvénient avec ce comportement, c'est que si libA.so est mis à jour et ne dépend plus de libB, alors il y aura une erreur de link à l'exécution.
Le nouveau comportement :
ld tente de trouver sym_B dans les .o
puis regarde dans la première couche de dépendances, libA
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é :
le programme dépend de libA
la libA dépend de libB
le programme ne fait aucun appel explicite à un symbole de libB
[^] # Re: J'ai ma réponse ...
Posté par ymorin . En réponse au message Édition "récursive" des liens modifiée dans les versions récentes de GCC ?. É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.