Resolver dependências circulares vinculando a mesma biblioteca duas vezes?

Temos uma base de código dividida em bibliotecas estáticas. Infelizmente, as bibliotecas têm dependências circulares; por exemplo.,libfoo.a depende delibbar.a e vice versa

Eu sei que a maneira "correta" de lidar com isso é usar o @ do vinculad--start-group e--end-group opções, assim:

g++ -o myApp -Wl,--start-group -lfoo -lbar -Wl,--end-group

Mas em nossos Makefiles existentes, o problema geralmente é tratado assim:

g++ -o myApp -lfoo -lbar -lfoo

(Imagine isso estendido para ~ 20 bibliotecas com interdependências complexas.)

Passei por nossos Makefiles alterando a segunda forma para a primeira, mas agora meus colegas de trabalho estão me perguntando o porquê ... E além de "porque é mais limpo" e uma vaga sensação de que a outra forma é arriscada, eu não tem uma boa resposta.

Então, pode vincular a mesma biblioteca várias vezessempr criar um problema? Por exemplo, o link poderia falhar com símbolos de definição múltipla se o mesmo .o for puxado duas vezes? Ou existe algum risco de acabar com duas cópias do mesmo objeto estático, criando bugs suti

Basicamente, quero saber se existe a possibilidade de falhas no tempo do link ou no tempo de execução vincularem a mesma biblioteca várias vezes; e se sim, como ativá-los. Obrigado

questionAnswers(6)

yourAnswerToTheQuestion