¿Por qué mi Visual C ++ generación de proyecto .exe crean archivos .lib y .exp?

StackOverflow https://stackoverflow.com/questions/2820694

  •  26-09-2019
  •  | 
  •  

Pregunta

I tiene una solución que consta de 3 proyectos. Se trata de una biblioteca estática, y dos son archivos .exe basadas en la consola que dependen de enlace y en contra de esta biblioteca. Sus ajustes parecen ser idénticos. Construyo una de ellas:

  

1> ------ Build comenzado: Proyecto: masksample, Configuración: Depuración Win32 ------
  1> Compilación ...
  1> stdafx.cpp
  1> Compilación ...
  1> masksample.cpp
  1> Compilación de manifiesto a los recursos ...
  1> Vinculación ...
  1> LINK: C: \ Users \ DarekSz \ Praca \ cci \ Debug \ masksample.exe que no se encuentra o no construido por el último eslabón incrementales; la realización de vínculo completo
  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 omitido ==========

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

  

1> ------ Build comenzado: Proyecto: calibsample, Configuración: Depuración Win32 ------
  1> Compilación ...
  1> stdafx.cpp
  1> Compilación ...
  1> calibsample.cpp
  1> Compilación de manifiesto a los recursos ...
  1> Vinculación ...
  1> LINK: C: \ Users \ DarekSz \ Praca \ cci \ Debug \ calibsample.exe que no se encuentra o no construido por el último eslabón incrementales; la realización de vínculo completo
  1> Creación de bibliotecas de C: \ Users \ DarekSz \ Praca \ cci \ Debug \ calibsample.lib y el objeto C: \ Users \ DarekSz \ Praca \ cci \ Debug \ calibsample.exp
  1> Incorporación de manifiesto ...
  1> calibsample - 0 Error (s), 0 de aviso (s)
  ========== construcción: 1 tuvieron éxito, 0 incorrectos, 1 hasta a la fecha, 0 omitido ==========

¿Por qué el enlazador crear el .lib y archivos .exp este tiempo? ¿Hay alguna opción para convertir esta encendido y apagado que he activado sin saber al respecto?

¿Fue útil?

Solución

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. Se trata de un proyecto DLL, los otros dos proyectos de aplicaciones Win32 que hacen referencia al proyecto DLL.

Por lo general, con su DLL construido, tiene también algunos otros de 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 piensa que ya está tratando de incluir algunos archivos .h "exportar" utilizar una expresión condicional para definir la 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"

Otros consejos

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top