¿Son posibles las dependencias de la biblioteca estática anidada?

12

Estoy trabajando en QT.

  1. ¿Puede una biblioteca estática depender de otra biblioteca estática? (Static Lib se crea al vincular otra biblioteca estática)
  2. En caso afirmativo, ¿es posible que después de vincular a lib2, la lib generada (lib1) no contenga todos los códigos de lib2?

En mi proyecto Qt estoy usando una biblioteca estática, que depende de varias bibliotecas. Tuve que agregar todas las bibliotecas (con todos sus encabezados en mi proyecto), aunque solo necesito una lib (y una .h de esa clase) en mi código.

Por favor explique el escenario.

sk patra
fuente

Respuestas:

6

Cuando declaras algo, solo prometes que durante el enlace estará disponible e identificado de forma única. Las bibliotecas estáticas no son más que contenedores para definiciones en un formato que está fuera del estándar. Entonces, esto tiene las siguientes implicaciones:

1) No bastante conseguir lo que está pidiendo aquí, pero una biblioteca estática puedo dependerá mucho de otra biblioteca estática. O bien promete que las definiciones de esa biblioteca estarán disponibles durante la etapa final de enlace de su ejecutable (al proporcionarla como dependencia de enlace). O lo "fusionas" durante el enlace de la lib estática.

2) La respuesta a esto se convierte en que lo único que debe hacer es simplemente no vincular en lib2 durante el enlace de lib1.

En general, el mejor enfoque en mi experiencia es fusionar solo las librerías que son privadas, la razón es que, de lo contrario, los clientes se encontrarán con violaciones de símbolos múltiples cuando otras partes de su proyecto compartan dependencias con usted.

Ylisar
fuente
Significa, una biblioteca estática que depende de otra biblioteca estática, pero contiene la información de enlace de esa biblioteca ES POSIBLE. Eso significa que cuando necesito incluir la primera biblioteca en mi proyecto, estoy obligado a incluir la segunda también. Bcoz, la primera lib no contiene códigos completos de la segunda lib. ¿Estoy en lo cierto?
sk patra
6

Mis dos bits rápidos sobre esto: 10 (lo siento, una broma terrible).

Para ampliar un poco, aquí va:

1- Una biblioteca estática puede depender de otra biblioteca estática, nada o incluso una biblioteca dinámica: en las dos primeras instancias, todo el código para la nueva biblioteca estática se incorporaría en el nuevo SLL (Static Link Library), sin embargo, la tercera opción , dependiendo del medio ambiente podría llevar a que el SLL tenga uno de los siguientes resultados,

  • contendría versiones estáticas del código requerido por el recopilado de la DLL (Biblioteca de enlaces dinámicos)
  • o, mucho más horrible, tendría una biblioteca estática que, cuando se incluye en un proyecto, provocaría el requisito de envío con una DLL, rompiendo todo el punto de enlace estático.

En resumen, sí, puede vincular una biblioteca estática a una biblioteca estática

2- si lib1 y lib2 son estáticos, y lib1 se ha vinculado con lib2, entonces toda la funcionalidad de lib2 estaría disponible dentro de lib1 sin la necesidad de incluir lib2 ya que lib2 estaría estáticamente vinculado dentro de lib1 (piense en las muñecas rusas, con lib2 siendo el más pequeño).

En el escenario que describe, debe haber una funcionalidad discreta disponible en cada uno de los archivos que tiene que incluir, que no está estáticamente vinculada, de ahí la necesidad de múltiples archivos, de lo contrario tendría que incluir un solo archivo y estaría bien.

Tome lo siguiente: Un archivo .h con referencias a 6 bibliotecas enlazadas estáticamente: necesitaría incluir 7 archivos en su proyecto para obtener la funcionalidad completa

ejemplo de inclusión 1

Un SLL que se creó a partir de dicho archivo .h requeriría que solo se incluyera el nuevo SLL para vincular en la compilación:

ejemplo de inclusión 2

Espero que esto ayude y que haya entendido lo que estaba preguntando.

GMasucci
fuente