c dll linker static-libraries

¿Qué es el uso de.exp y cuál es la diferencia entre.lib y.dll



linker static-libraries (1)

Durante la compilación y el enlace, ¿para qué sirve .exp? ¿Cuál es la diferencia entre .lib y .dll? Sé que se usará .lib, mientras que el enlace y .dll se usarán al ejecutar el programa. Pero, ¿cuál es exactamente la diferencia entre .lib y .dll?

¿El archivo .lib no contiene el código para las funciones provenientes de los archivos .dll? ¿Cuál es la necesidad de usar dos archivos separados?

Por favor aclara Gracias por adelantado


En el caso de una biblioteca de importación para una DLL, el archivo .lib no contiene ningún código real. Básicamente contiene solo una lista de las funciones en la DLL asociada, suficiente para que el enlazador incorpore una referencia a esa DLL en algo relacionado con la biblioteca, pero no mucho más.

Un archivo .exp es un archivo de exportación, básicamente casi lo mismo que un archivo .lib. Se usa (al menos principalmente) cuando tienes una dependencia circular. Por ejemplo, supongamos que tiene una DLL que actúa como complemento de un ejecutable. El ejecutable proporciona algunas funciones exportadas para que las DLL de complemento las utilicen, pero también necesita poder llamar algunas funciones en los complementos (por ejemplo, cargar e inicializar un complemento).

La DLL no se vinculará hasta que el archivo ejecutable esté configurado para proporcionar un archivo .lib, pero el archivo ejecutable no se vinculará hasta que la DLL se genere para proporcionar un archivo .lib. Para romper la dependencia, ejecuta el enlazador contra el ejecutable, que falla (porque no puede encontrar un archivo .lib para la DLL), pero producirá un archivo .exp. A continuación, vincula el archivo DLL con el archivo .exp para el ejecutable. A continuación, puede volver a ejecutar el enlace para producir el archivo ejecutable, utilizando el archivo .lib para la DLL.