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.

LD: ¿Implica –export-dynamic –whole-archive para una biblioteca estática si alguno de sus símbolos es referenciado?

Mi ejecutable principal se enlaza con una biblioteca estática cuyos símbolos deben estar disponibles para bibliotecas dinámicas cargadas a través de dlopen(). Entiendo que necesito usar las banderas -Wl,–export-dynamic,–whole-archive para que funcione. Sin embargo, hay muchas bibliotecas especificadas en el comando de enlace, algunas pueden no ser utilizadas, y tengo dificultades para aplicar –whole-archive selectivamente a la biblioteca necesaria a través de cmake dentro de la infraestructura de construcción actual. Lo que veo es que si solo se utiliza -Wl,–export-dynamic y el ejecutable llama a una función en la biblioteca estática de interés, entonces toda la biblioteca se incluye con el mismo efecto de especificar –whole-archive para ella, que es exactamente lo que necesito. ¿Puedo confiar en este comportamiento para imponer implícitamente –whole-archive en bibliotecas cuyos símbolos son referenciados por el ejecutable?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Como experto en IT especializado en gcc y linker, puedo proporcionar algunas ideas sobre tu consulta.

    Es cierto que para hacer que los símbolos estén disponibles en las bibliotecas dinámicas cargadas a través de dlopen(), es necesario utilizar las opciones -Wl,--export-dynamic,--whole-archive. Sin embargo, aplicar --whole-archive a una biblioteca específica puede resultar complicado a través de cmake dentro de una infraestructura de construcción existente, especialmente cuando hay muchas bibliotecas especificadas en el comando de enlace, algunas de las cuales pueden no estar en uso.

    Por lo que estás viendo, parece ser que si solo se utiliza -Wl,--export-dynamic y el ejecutable llama a una función en la biblioteca estática de interés, entonces toda la biblioteca se incluye, teniendo el mismo efecto que especificar --whole-archive para ella. Este comportamiento puede parecer imponer implícitamente --whole-archive en las bibliotecas cuyos símbolos son referenciados por el ejecutable.

    Sin embargo, es importante tener en cuenta que este comportamiento no siempre es confiable, y puede haber casos en los que el enlazador no incluya toda la biblioteca. Por lo tanto, se recomienda utilizar explícitamente --whole-archive para la biblioteca específica que necesitas, para asegurarte de que se incluyan todos sus símbolos.

    En resumen, aunque parezca que puedes confiar en el comportamiento implícito de -Wl,--export-dynamic para imponer --whole-archive en las bibliotecas cuyos símbolos son referenciados por el ejecutable, se recomienda utilizar explícitamente --whole-archive para la biblioteca específica que necesitas, para asegurarte de que se incluyan sus símbolos.

Comments are closed.