Qu’est-ce que la liaison partielle dans GNU Linker?

La meilleure explication que j’ai pu trouver était tirée du document officiel:

-r –relocateable Génère une sortie relogeable – c’est-à-dire génère un fichier de sortie qui peut à son tour servir d’entrée à ld. Ceci est souvent appelé liaison partielle. Comme effet secondaire, dans les environnements prenant en charge les nombres magiques Unix standard, cette option définit également le nombre magique du fichier de sortie sur OMAGIC. Si cette option n’est pas spécifiée, un fichier absolu est généré. Lors de la liaison de programmes C ++, cette option ne résoudra pas les références aux constructeurs; pour ce faire, utilisez -Ur. Cette option fait la même chose que `-i ‘.

Je suis particulièrement intéressé à savoir ce qu’il advient des symboles présents dans les entrées de l’éditeur de liens. Prenons un cas spécifique lorsque j’ai une bibliothèque statique libstatic.a qui contient un seul composant object.o . Maintenant, je veux créer une autre bibliothèque statique libfinal.a qui fonctionnera comme une interface pour libstatic.a . J’utilise cette commande pour le créer:

ld -r -o libfinal.a wrapper.o -L. -lstatic

wrapper.o fournit des API exclusives pour appeler les fonctions définies dans libstatic.a

Libfinal.a sera- t- il simplement une archive combinée comprenant wrapper.o et composant.o ou toutes les références pouvant être résolues entre wrapper.o et composant.o seront-elles résolues (liens) puis placées dans libfinal.a ?

Edit_1: Mise à jour de la question en fonction des progrès réalisés: L’object objdump de la bibliothèque de composants libstatic.a ( objdump -D libstatic.a ) affiche les sections .text séparément pour chaque fonction (comme prévu). Alors que dans la bibliothèque combinée libfinal.a , qui a été créée par un lien partiel ( -r flag), il n’ya qu’une seule section .text . J’imagine que cela signifie qu’un lien interne a eu lieu et qu’il ne s’agit pas simplement de créer une archive simple.

ld crée des exécutables et des bibliothèques partagées, pas des archives de fichiers objects (fichiers .a).

ar crée et modifie les archives de fichiers objects.


-r, --relocateable option -r, --relocateable est utile lorsque vous souhaitez résoudre certains symboles (non résolus) d’un .so et générer un autre .so .