c++ winapi linker

c++ - Al compilar un archivo DLL, ¿el archivo LIB generado contiene el nombre de la DLL?



winapi linker (3)

Sí, la lib contiene el nombre de la DLL.

Funcionalmente, la biblioteca de importación implementa las llamadas LoadLibrary y GetProcAdress , y hace que las funciones exportadas estén disponibles como si estuvieran vinculadas estáticamente.

La ruta de búsqueda es la misma que documentada para LoadLibrary , aunque el nombre es fijo.

En Visual C ++, cuando construyo un dll, los archivos de salida son .dll y .lib.

Es el nombre del dll integrado en el archivo .lib.

El motivo por el que formulo esta pregunta es: Cuando construí mi exe importando este dll y ejecutando el exe, el exe intenta localizar el dll para cargarlo en el espacio de direcciones de proceso.

Como solo especificamos el nombre de la biblioteca (archivo .lib) en las propiedades del proyecto, ¿cómo obtiene el exe el nombre del dll?

Nota: I dumpbin libary file (.lib) y vi que no contiene el nombre de la dll.


El archivo LIB se convierte en una tabla de importación en el EXE. Esto contiene el nombre de la DLL.

Puede ver esto si ejecuta dumpbin /all MyDLL.lib . Tenga en cuenta que dumpbin MyDll.lib por sí solo no muestra nada útil: debe usar /all .

Esto muestra todas las secciones definidas en el archivo .LIB. Puede ignorar cualquier sección .debug , ya que no estaría presente en una compilación de versión. En el archivo .LIB, hay una colección de secciones .idata. En el proyecto DLL que acabo de .idata$4 , el archivo LIB contiene una sección .idata$4 que define los símbolos que se colocarán en la tabla de importación del EXE, incluido el nombre de la DLL:

Archive member name at 83E: MyDll.dll/ 497C3B9F time/date Sun Jan 25 10:14:55 2009 uid gid 0 mode 2E size correct header end Version : 0 Machine : 14C (x86) TimeDateStamp: 497C3B9F Sun Jan 25 10:14:55 2009 SizeOfData : 0000001A DLL name : MyDll.dll Symbol name : ?fnMyDll@@YAHXZ (int __cdecl fnMyDll(void)) Type : code Name type : name Hint : 2 Name : ?fnMyDll@@YAHXZ


Como señalaron Roger y Peter, sí, el archivo .lib contiene el nombre del archivo .dll. Y gracias a Roger por señalar que dumpbin muestra el nombre del archivo .dll, esto me ayudó a resolver mi problema. Que se relaciona con el origen del nombre en el archivo .lib.

Esperaba que se tomara el nombre de la configuración del proyecto para el proyecto dll pero teníamos un export.def que especificaba el nombre para el dll. Así que tuvimos problemas al usar nuestro dll cuando cambié la configuración del proyecto pero no export.def. La solución para nuestro proyecto fue borrar el archivo export.def.