2010-05-12 12 views
12

Tengo una solución que consta de 3 proyectos. Una es una biblioteca estática, y dos son archivos .exe basados ​​en consola que dependen y se vinculan con esta biblioteca. Sus configuraciones parecen ser idénticas. Construyo una de ellas:¿Por qué mi proyecto de Visual C++ .exe crea archivos .lib y .exp?

1> ------ Build comenzó: Proyecto: masksample, Configuración: Depuración Win32 ------
1> Compilar ...
1> stdafx .cpp
1> Compilar ...
1> masksample.cpp
1> Compilación de manifiesto a los recursos ...
1> Vinculación ...
1> Enlace: C: \ Users \ DarekSz \ Praca \ cci \ Debug \ masksample.exe no encontrado o no creado por el último enlace incremental; la realización completa enlace
1> Incorporación de manifiesto ...
1> masksample - 0 Error (s), 0 de aviso (s)
========== construcción: 1 tuvieron éxito, 0 incorrectos, 1 hasta a la fecha, 0 omiten ==========

Después paso a la construcción de la otra:

1> ------ Build comenzó: Proyecto: calibsample, Configuración: Depurar Win32 ------
1> Compilar ...
1> stdafx.cpp
1> Compilar ...
1> calibsample.cpp
1> Compilación de manifiesto a los recursos ...
1> Vinculación ...
1> LINK: C: \ Users \ DarekSz \ Praca \ cci \ Debug \ calibsample.exe no encontrado o no creado por el último enlace incremental; realizando el enlace completo
1> Creando la biblioteca C: \ Users \ DarekSz \ Praca \ cci \ Debug \ calibsample.lib y el objeto C: \ Users \ DarekSz \ Praca \ cci \ Debug \ calibsample.exp
1> Embedding manifest. ..
1> calibsample - 0 error (s), 0 advertencia (es)
========== Compilación: 1 satisfactoria, 0 fallida, 1 actualizada, 0 omitida == ========

¿Por qué el enlazador crea los archivos .lib y .exp esta vez? ¿Hay alguna opción para activar y desactivar esto que activé sin saberlo?

Respuesta

16

Es un poco tarde, pero, tal vez alguien más podría encontrar útil esta sugerencia.

Por cierto que no soy un gurú C++ ...

En mi solución tengo 3 proyectos. Uno es un proyecto dll, los otros son dos proyectos de la aplicación Win32 que hacen referencia al proyecto dll.

Por lo general, con su DLL construido, tiene también algunas otras archivo generado (.exp, .lib) también para los proyectos que no son DLL. Esto puede occour cuando se incluye un archivo .h del proyecto DLL, en el proyecto de aplicación, que contiene una clase marcada con __declspec (dllexport).

Para evitar el enlazador cree que su están tratando de incluir alguna.Los archivos h para "exportar" usan una expresión condicional para definir su macro _declspec.

Ejemplo:

#if defined(_DO_NOT_EXPORT) 
#define DllExport 
#else 
#define DllExport __declspec(dllexport) 
#endif 

Ok, digamos que usted tiene un MyClass.h en su proyecto DLL.

en su archivo .h que podría tener ahora:

class DllExport MyClass { 
... 
} 

Cuando se quiere incluir este archivo .h en un proyecto DLL NO, usted tiene simplemente para definir la condición _DO_NOT_EXPORT

#define _DO_NOT_EXPORT 
#include "MyClass.h" 
+0

¡Muchas gracias por esta entrada! – neuviemeporte

+1

Oh sí, olvidé hacer esto en mi proyecto ... gracias por la respuesta –

+0

¡agradable! muy útil. – Yves

2

Esto es normal si una o más funciones es/son exportados desde su ejecutable.

+0

¿Qué significa exportar funciones desde un ejecutable? – neuviemeporte

+0

Al igual que exportar funciones de una DLL, también puede exportarlas desde un archivo ejecutable. –

+1

No puedo ver cómo mi ejecutable está exportando ninguna función. Está contenido en main() en su totalidad. – neuviemeporte

Cuestiones relacionadas