es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo es posible vincular bibliotecas estáticas con el mismo símbolo?

Tengo dos bibliotecas estáticas foo.a y bar.a. Cada biblioteca contiene el mismo símbolo:

$ nm foo.a | grep <em>some</em>symbol
                 U <em>some</em>symbol
0000000000000000 R <em>some</em>symbol

<p>$ nm bar.a | grep <em>some</em>symbol
                 U <em>some</em>symbol
0000000000000020 R <em>some</em>symbol

Cuando intento enlazarlos usando g++ /*other_static_libs*/ foo.a bar.a, funciona bien, pero no entiendo por qué no se produce un error de definición múltiple durante la vinculación.

¿Tienes alguna idea de cuándo podría ser esto posible?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en c++, bibliotecas estáticas y enlace, puedo explicar por qué falta el error de definición múltiple durante el enlace en este escenario. La razón es que el símbolo “_some_symbol” no está definido en ninguna de las bibliotecas estáticas, sino que solo se declara como un símbolo no definido (indicado por la bandera “U” en la salida del comando “nm”).

    Durante el proceso de enlace, el enlazador busca la definición de “_some_symbol” en todos los archivos de objeto y bibliotecas proporcionadas como entrada. Si el enlazador encuentra múltiples definiciones del mismo símbolo, se produce un error de definición múltiple. Sin embargo, en este caso, dado que tanto foo.a como bar.a solo declaran “_some_symbol” como un símbolo no definido, no hay conflicto entre ellos y el proceso de enlace se completa correctamente.

    Entonces, para resumir, si un símbolo solo se declara como un símbolo no definido en múltiples bibliotecas estáticas pero no se define, no habrá ningún error de definición múltiple durante el enlace.

Comments are closed.