Quais são as opções de linha de comando –start-group e –end-group?

Qual é o propósito dessas opções de linha de comando? Por favor, ajude a decifrar o significado da seguinte linha de comando:

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

Aparentemente, tem algo a ver com linkar, mas o manual do GNU é silencioso, o que exatamente significa agrupamento.

É para resolver dependencies circulares entre várias bibliotecas (listadas entre -( e -) ).

Citando Por que a ordem na qual as bibliotecas estão vinculadas às vezes causa erros no GCC? ou man ld http://linux.die.net/man/1/ld

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

Os arquivos devem ser uma lista de arquivos compactados. Eles podem ser nomes de arquivos explícitos ou opções -l.

Os arquivos especificados são pesquisados ​​repetidamente até que não sejam criadas novas referências indefinidas. Normalmente, um arquivo é pesquisado apenas uma vez na ordem em que é especificado na linha de comando. Se um símbolo nesse archive for necessário para resolver um símbolo indefinido referido por um object em um archive que aparece posteriormente na linha de comando, o vinculador não poderá resolver essa referência. Ao agrupar os arquivos, todos eles serão pesquisados ​​repetidamente até que todas as referências possíveis sejam resolvidas.

Usar essa opção tem um custo de desempenho significativo. É melhor usá-lo somente quando houver referências circulares inevitáveis ​​entre dois ou mais arquivos.

Assim, bibliotecas dentro do grupo podem ser pesquisadas por novos símbolos várias vezes, e você não precisa de construções feias como -llib1 -llib2 -llib1

Arquivo PS significa basicamente uma biblioteca estática (arquivos *.a )