2010-04-28 12 views
48

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?para qué sirve .exp y cuál es 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, aclare. Gracias de antemano

Respuesta

71

En el caso de una biblioteca de importación para un archivo DLL, el archivo .lib hace no contiene ningún código real en absoluto. 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).

El archivo DLL no se vinculará hasta que el archivo ejecutable se cree para proporcionar un archivo .lib, pero el archivo ejecutable no se vinculará hasta que el archivo DLL se genere para proporcionar un archivo .lib. Para romper la dependencia, ejecute el vinculador contra el ejecutable, que falla (porque no puede encontrar un archivo .lib para la DLL), pero generará 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.

Cuestiones relacionadas