为什么我的Visual C ++ .exe项目构建创建.lib和.exp文件?

时间:2010-05-12 16:15:38

标签: visual-c++ linker exp

我有一个由3个项目组成的解决方案。一个是静态库,两个是基于控制台的.exe文件,它们依赖于此库并链接到该库。他们的设置似乎相同。我建立了其中一个:

  

1> ------ Build build:Project:masksample,Configuration:Debug Win32 ------
  1 GT;编译...
  1 GT; stdafx.cpp
  1 GT;编译...
  1 GT; masksample.cpp
  1>将清单编译为资源...
  1 GT;链接...
  1> LINK:C:\ Users \ DarekSz \ Praca \ cci \ Debug \ masksample.exe未找到或未由最后一个增量链接构建;执行完整链接
  1>嵌入清单...
  1>掩码样本 - 0个错误,0个警告
  ==========构建:1成功,0失败,1最新,0跳过==========

然后我继续建造另一个:

  

1> ------构建开始:项目:calibsample,配置:调试Win32 ------
  1 GT;编译...
  1 GT; stdafx.cpp
  1 GT;编译...
  1 GT; calibsample.cpp
  1>将清单编译为资源...
  1 GT;链接...
  1> LINK:C:\ Users \ DarekSz \ Praca \ cci \ Debug \ calibsample.exe未找到或未由最后一个增量链接构建;执行完整链接
  1 GT;创建库C:\ Users \ DarekSz \ Praca \ cci \ Debug \ calibsample.lib和对象C:\ Users \ DarekSz \ Praca \ cci \ Debug \ calibsample.exp
  1>嵌入清单...
  1>校准样本 - 0个错误,0个警告
  ==========构建:1成功,0失败,1最新,0跳过==========

为什么链接器这次会创建.lib和.exp文件?是否有一些选项可以在不知情的情况下打开和关闭它?

2 个答案:

答案 0 :(得分:20)

这有点晚了,但也许其他人可以找到有用的提示。

BTW我不是c ++专家......

在我的解决方案中,我有3个项目。一个是dll项目,其他是两个引用dll项目的Win32应用程序项目。

通常,在构建了dll之后,您还会为NON dll项目生成其他一些文件(.exp,.lib)。当您将dll项目的.h文件包含到app项目中时,会出现这种情况,该项目包含一个标有__declspec(dllexport)的类。

为避免链接器认为您试图将某些.h文件包含到“export”中,请使用条件表达式来定义_declspec宏。

示例:

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

好的,假设你的dll项目中有一个MyClass.h。

您现在可以在.h文件中找到

class DllExport MyClass {
 ...
}

如果要将此.h文件包含到NON dll项目中,只需定义_DO_NOT_EXPORT条件

#define _DO_NOT_EXPORT
#include "MyClass.h"

答案 1 :(得分:3)

如果从您的可执行文件中导出一个或多个函数,这是正常的。