web-dev-qa-db-fra.com

Quelles sont les options de ligne de commande --start-group et --end-group?

Quel est le but de ces options de ligne de commande? Aidez-nous à déchiffrer la signification de la ligne de commande suivante:

-Wl,--start-group -lmy_lib -lyour_lib -lhis_lib -Wl,--end-group -ltheir_lib

Apparemment, cela a quelque chose à voir avec la liaison, mais le manuel GNU est silencieux ce que signifie exactement le regroupement.

73
pic11

C'est pour résoudre les dépendances circulaires entre plusieurs bibliothèques (répertoriées entre -( et -)).

Citer Pourquoi l'ordre dans lequel les bibliothèques sont liées provoque-t-il parfois des erreurs dans GCC? ou man ldhttp://linux.die.net/man/1/ld

-( archives -) ou --start-group archives --end-group

Les archives doivent être une liste de fichiers d'archives. Il peut s'agir de noms de fichiers explicites ou d'options -l.

Les archives spécifiées sont recherchées à plusieurs reprises jusqu'à ce qu'aucune nouvelle référence non définie ne soit créée. Normalement, une archive n'est recherchée qu'une seule fois dans l'ordre indiqué sur la ligne de commande. Si un symbole dans cette archive est nécessaire pour résoudre un symbole non défini auquel fait référence un objet dans une archive qui apparaît plus tard sur la ligne de commande, l'éditeur de liens ne pourra pas résoudre cette référence. En regroupant les archives, elles sont toutes recherchées à plusieurs reprises jusqu'à ce que toutes les références possibles soient résolues.

L'utilisation de cette option a un coût de performance important. Il est préférable de ne l'utiliser que lorsqu'il existe des références circulaires inévitables entre deux ou plusieurs archives.

Ainsi, les bibliothèques à l'intérieur du groupe peuvent être recherchées plusieurs fois pour de nouveaux symboles, et vous n'avez pas besoin de constructions laides comme -llib1 -llib2 -llib1

Archive PS signifie essentiellement une bibliothèque statique (*.a des dossiers)

87
osgx