c++ - librerias - crear libreria dinamica linux
¿Cómo se relacionan las bibliotecas estáticas con las dependencias? (3)
Digamos que tengo libA. Depende, por ejemplo, de libSomething por el simple hecho de que un método no en línea de libA realiza una llamada a un método en libSomething.h. ¿Cómo se vincula la dependencia en este caso? ¿LibA tiene que vincular estáticamente a libSomething cuando se compila, o un usuario de libA (una aplicación que usa libA) necesita vincularse a libA y libSomething?
Gracias
Durante el proceso de compilación, el compilador traduce el código en un formato temporal, vamos a llamarlo un archivo objeto. En el archivo objeto, hay una lista de símbolos que el compilador no pudo resolver, generalmente definiciones en otros lugares. La fase de enlace se encarga de resolver estos símbolos.
El proceso de compilación carga los archivos al enlazador hasta que se resuelvan todos los símbolos. No hay listas de dependencia física, solo listas de símbolos para resolver. Esto permite que los símbolos se resuelvan utilizando diferentes bibliotecas. Por ejemplo, uno puede querer usar una biblioteca de Windows para problemas específicos de Windows; una biblioteca de Linux para problemas específicos de Linux. Esto no establece explícitamente que un programa depende de una biblioteca de Windows; también podría depender del Linux.
Algunos compiladores pueden generar listas de dependencia, generalmente para el uso en un proceso de compilación. Sin embargo, la responsabilidad final depende del programador.
La vinculación estática es simplemente copiar los elementos completos (funciones, constantes, etc.) en el ejecutable resultante. Si el código de una biblioteca estática contiene referencias a algunos elementos de la biblioteca compartida, estas referencias se convertirán en dependencias en el ejecutable resultante. Lo mismo ocurre si vincula una biblioteca en lugar de ejecutable.
Este hilo discute cómo sucede en Linux.
Una biblioteca estática es más o menos un archivo simple de archivos de objetos binarios no vinculados (* .o o * .obj), al compilar el archivo, no se realiza ninguna verificación para las dependencias. Cuando se vincula el ejecutable binario de uno (o biblioteca / DLL compartido), el vinculador comprueba todas las dependencias necesarias y solo entonces le alerta de cualquier problema.