Resolver dependencias circulares vinculando la misma biblioteca dos veces?

Tenemos una base de código dividida en bibliotecas estáticas. Desafortunadamente, las bibliotecas tienen dependencias circulares; p.ej.,libfoo.a depende delibbar.a y viceversa

Sé que la forma "correcta" de manejar esto es usar el @ del vinculad--start-group y--end-group opciones, así:

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

Pero en nuestros Makefiles existentes, el problema generalmente se maneja así:

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

(Imagine que esto se extiende a ~ 20 bibliotecas con interdependencias complejas).

He estado revisando nuestros Makefiles cambiando el segundo formulario por el primero, pero ahora mis compañeros de trabajo me preguntan por qué ... Y aparte de "porque está más limpio" y tengo la vaga sensación de que el otro formulario es arriesgado, lo hago. no tengo una buena respuesta.

Entonces, puede vincular la misma biblioteca varias vecesnunc crear un problema? Por ejemplo, ¿podría el enlace fallar con símbolos de definición múltiple si el mismo .o se extrae dos veces? ¿O existe algún riesgo de que podamos terminar con dos copias del mismo objeto estático, creando errores sutiles?

Básicamente, quiero saber si existe alguna posibilidad de fallas en el tiempo de enlace o tiempo de ejecución al vincular la misma biblioteca varias veces; y si es así, cómo activarlos. Gracias

Respuestas a la pregunta(6)

Su respuesta a la pregunta