Estoy usando una biblioteca de C++ que se puede generar como biblioteca compartida o estática. Esta biblioteca utiliza una técnica de fábrica, donde los objetos estáticos se registran cuando se inicia el programa y se crean los objetos estáticos.Cómo forzar a gcc a vincular objetos C++ estáticos sin referencia de una biblioteca
Esto funciona bien siempre que se use la biblioteca compartida. Cuando se utiliza la versión estática, ninguno de los objetos estáticos se incluye en el programa final (porque no se hace referencia directamente) y, por lo tanto, su funcionalidad no está disponible.
¿Hay alguna manera de forzar a gcc para que incluya todos los objetos estáticos de una biblioteca al enlazar?
La biblioteca es de código abierto y podría modificarla, si eso ayuda.
-Wl, - archivo completo hace que se incluyan muchos símbolos que ya están incluidos en otras bibliotecas o que no se pueden resolver. ¿Hay una manera más fina de incluir la estática? –
Esto no tiene sentido Gene: es lo mismo que cargar una biblioteca compartida: obtienes toda la biblioteca, y nada más. Es cierto que tengo una noción equivocada de encontrar referencias externas, por lo que debe tener el orden correcto. – Yttrill
Desactivar el comportamiento con '-Wl, - no-whole-archive' no es opcional, incluso si no tiene más bibliotecas para incluir. GCC agregará todas las bibliotecas de sistema estándar al final de su comando, por lo que si deja '' -whole-archive' activado, todas se verán afectadas y se generará un problema de símbolo duplicado. @GeneVincent comentó acerca de –