• [^] # Re: J'ai ma réponse ...

    Posté par . En réponse au message Édition "récursive" des liens modifiée dans les versions récentes de GCC ?. Évalué à 3.

    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

    Dans ce cas, l'édition de liens va réussir.

    Hop,
    Moi.