18

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

1>----- 构建开始:项目:masksample,配置:Debug Win32 ------
1>Compiling...
1>stdafx.cpp
1>Compiling...
1>masksample.cpp
1>Compiling清单到资源...
1>链接...
1>LINK : C:\Users\DarekSz\Praca\cci\Debug\masksample.exe 未找到或未由最后一个增量链接构建;执行完整链接
1>Embedding manifest...
1>masksample - 0 个错误,0 个警告
========== 构建:1 个成功,0 个失败,1 个最新, 0 跳过 ===========

然后我继续构建另一个:

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

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

4

2 回答 2

21

有点晚了,但也许其他人会发现这个提示有用。

顺便说一句,我不是 C++ 大师...

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

通常,在构建 dll 后,您还会为非 dll 项目生成一些其他文件(.exp、.lib)。当您将 dll 项目的 .h 文件包含到应用程序项目中时,可能会发生这种情况,其中包含一个标有 __declspec(dllexport) 的类。

为了避免链接器认为您正在尝试包含一些 .h 文件以“导出”,请使用条件表达式来定义您的 _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"
于 2010-10-24T11:50:59.777 回答
5

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

于 2010-05-12T16:18:13.603 回答