2009-02-24 17 views
55

Quiero tener un único proyecto de Visual Studio que cree un archivo DLL y un archivo de biblioteca de importación (.lib). (Una biblioteca de importación es una biblioteca enlazada estáticamente que se encarga de cargar ese archivo DLL en otros proyectos que lo usan).¿Cómo construyo una biblioteca de importación (.lib) Y una DLL en Visual C++?

Así que fui a Visual Studio C++ 2008 Express Edition, creé un nuevo proyecto de tipo Biblioteca de clases y configuré el "Tipo de configuración" para que fuera "Biblioteca Dyanamic (.dll)".

Pero cuando construyo la solución, el único archivo de salida relevante que veo es un archivo DLL; No veo que se genere ningún archivo LIB. Busqué en el directorio del proyecto y en todos los subdirectorios (Release and Debug).

Creo que es posible construir un archivo LIB y un archivo DLL al mismo tiempo porque on the MSDN it says "The linker creates the import library when the DLL is built." También, another user of this website is creating LIB and DLL files at the same time using Visual C++.

Entonces, ¿cómo puedo hacerlo?

+1

Acabo de tener este problema exacto en el que mi archivo .lib no se estaba generando. Después de buscar en Google toda la información que pude encontrar sobre las posibles causas y examinar detenidamente todas las respuestas a continuación, finalmente descubrí que era porque mi archivo .cpp no ​​incluía mi archivo .h. :(Solo lo lanzo aquí para que mi comentario pueda (con una pequeña probabilidad) ayudar a alguien/a mí mismo si mi estúpido error se repite en algún futuro lejano ... – user1884905

Respuesta

19

Al seleccionar 'Class Library' accidentalmente le indicaba que creara una biblioteca .Net utilizando la extensión CLI (administrada) de C++.

En su lugar, cree un proyecto Win32, y en la Configuración de la aplicación en la página siguiente, elija 'DLL'.

También puede hacer una DLL de MFC o ATL de esas opciones de biblioteca si desea seguir esa ruta, pero parece que no es así.

68

¿Su proyecto DLL tiene exportaciones reales? Si no hay exportaciones, el vinculador no generará un archivo .lib de biblioteca de importación.

En la versión no-Express de VS, el nombre libray importación es specfied en la configuración del proyecto aquí:

Configuration Properties/Linker/Advanced/Import Library 

supongo que es lo mismo en Express (si es que ofrece la posibilidad de configurar el nombre)

+6

Gracias Michael, en mi caso, lib no se generaba porque no había exportaciones. – Uday

+4

OK, entonces, ¿qué significa esto? Especifiqué la biblioteca de importación en mi proyecto dll y todavía no creó el dll. Lo puse en el proyecto que usa mi DLL y tampoco causó que se construyera. Estoy usando Visual C++ 2010 Express – Thom

+1

¿Podría aclarar un poco sobre esto? Especificar la biblioteca de importación solo no parece generar el archivo .lib. –

8

también debe especificar def nombre en la configuración del proyecto aquí:

Configuración> Propiedades/Entrada/Avanzado/Módulo> archivo de definición de

+4

Localizado en 'Configuration Properties' /' Linker'/'Input' /' Module Definition File' en VS2010 – Pakman

+0

¿Cómo se crea el archivo de definición? ¿Qué entra? –

+0

Gracias ... esto me estaba llevando por la pared. –

23

OK, así que encontré la respuesta de http://binglongx.wordpress.com/2009/01/26/visual-c-does-not-generate-lib-file-for-a-dll-project/ dice que este problema era causado por no exportar ningún símbolo y además instruye sobre cómo exportar símbolos para crear el archivo lib. Para hacerlo, agregue el siguiente código a su archivo .h para su DLL.

#ifdef BARNABY_EXPORTS 
#define BARNABY_API __declspec(dllexport) 
#else 
#define BARNABY_API __declspec(dllimport) 
#endif 

Donde BARNABY_EXPORTS y BARNABY_API son definiciones únicas para su proyecto. Entonces, cada función que se exporta simplemente preceden por:

BARNABY_API int add(){ 
} 

Este problema se podría haber evitado, ya sea haciendo clic en el cuadro Exportar símbolos en el nuevo archivo DLL Asistente de proyecto o mediante el voto afirmativo de las lobotomías para los informáticos.

+0

¿Puedes editar esto para que no sea una copia exacta de tu otra respuesta? Hacer que se aplique a esta pregunta es un buen punto de partida. Gracias. – Will

+0

Solucionado, Will. Accidentalmente publiqué esa respuesta a esta página. Ahora he limpiado mi desorden. Gracias por mirarme. – Thom

+4

+1 para las "lobotomías para programadores de computadoras". –

Cuestiones relacionadas