2010-05-12 189 views
12

我有一个由3个项目组成的解决方案。一个是静态库,另外两个是基于控制台的.exe文件,这些文件依赖于该库并链接到该库。他们的设置似乎是相同的。我建立了他们中的一个:为什么我的Visual C++ .exe项目会创建.lib和.exp文件?

1> ------构建开始:项目:masksample,配置:调试的Win32 ------
1>正在编译...
1> stdafx的.cpp
1>编译...
1> masksample.cpp
1>编译清单以资源...
1>链接...
1> LINK:C:\用户\ DarekSz \普拉查\ cci \ Debug \ masksample.exe未找到或未由最后一个增量链接构建;执行完整链接
1>嵌入清单...
1> masksample - 0个错误,0个警告
==========构建:1成功,0失败,1上最新,0已跳过==========

然后我去构建另:

1> ------构建开始:项目:calibsample,配置:调试Win32 ------
1>编译...
1> stdafx.cpp
1>编译...
1> calibsample.cpp
1>编译清单以资源...
1>链接...
1> LINK:C:\用户\ DarekSz \普拉查\ 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文件?有没有一些选项可以打开和关闭,我不知道它的激活?

回答

16

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

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

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

通常,随着你的DLL的建立,你也有一些其他的文件生成(.exp,.lib)也为非DLL项目。当包含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文件中变成非DLL项目,你只需定义_DO_NOT_EXPORT条件

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

非常感谢这个输入! – neuviemeporte 2010-10-26 12:54:17

+1

哦,是的,我忘了在我的项目中这样做...谢谢你的回答 – 2011-12-10 00:46:13

+0

不错!非常有帮助。 – Yves 2015-08-10 14:12:26

2

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

+0

这是什么意思,从可执行文件导出函数? – neuviemeporte 2010-05-12 16:48:55

+0

就像您从DLL导出函数一样,您也可以从可执行文件导出它们。 – 2010-05-12 16:55:38

+1

我看不到我的可执行文件如何导出任何功能。它包含在main()中。 – neuviemeporte 2010-05-12 17:21:11

相关问题