Quali sono le opzioni della riga di comando –start-group e –end-group?

Qual è lo scopo di queste opzioni della riga di comando? Si prega di aiutare a decifrare il significato della seguente riga di comando:

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

Apparentemente ha qualcosa a che fare con il collegamento, ma il manuale GNU è silenzioso.

Serve a risolvere dipendenze circolari tra diverse librerie (elencate tra -( e -) ).

Citando Perché l’ordine in cui le librerie sono collegate a volte causa errori in GCC? o man ld http://linux.die.net/man/1/ld

-( archivi -) o --start-group archives --end-group

Gli archivi dovrebbero essere una lista di file di archivio. Possono essere nomi di file espliciti o opzioni -l.

Gli archivi specificati vengono cercati ripetutamente fino a quando non vengono creati nuovi riferimenti non definiti. Normalmente, un archivio viene cercato una sola volta nell’ordine in cui è specificato sulla riga di comando. Se un simbolo in quell’archivio è necessario per risolvere un simbolo indefinito a cui fa riferimento un object in un archivio che appare in seguito sulla riga di comando, il linker non sarebbe in grado di risolvere quel riferimento. Raggruppando gli archivi, tutti vengono cercati ripetutamente finché tutti i possibili riferimenti non vengono risolti.

L’utilizzo di questa opzione ha un costo significativo delle prestazioni. È preferibile utilizzarlo solo quando ci sono riferimenti circolari inevitabili tra due o più archivi.

Quindi, le librerie all’interno del gruppo possono essere cercate per nuovi simboli più volte, e non hai bisogno di brutti costrutti come -llib1 -llib2 -llib1

Archivio PS significa fondamentalmente una libreria statica (file *.a )