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

Visual c++ 为什么我的Visual C++。exe项目生成创建.lib和.exp文件?,visual-c++,linker,exp,Visual C++,Linker,Exp,我有一个由3个项目组成的解决方案。一个是静态库,两个是基于控制台的.exe文件,它们依赖于此库并链接到此库。它们的设置似乎是相同的。我构建了其中一个: 1> ----构建已启动:项目:masksample,配置:Debug Win32------ 1> 编译… 1> stdafx.cpp 1> 编译… 1> masksample.cpp 1> 正在将清单编译为资源… 1> 链接… 1> 链接:C:\Users\DarekSz\Praca\cci\Debug\masksample.exe未找到或未

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

1> ----构建已启动:项目:masksample,配置:Debug Win32------
1> 编译…
1> stdafx.cpp
1> 编译…
1> masksample.cpp
1> 正在将清单编译为资源…
1> 链接…
1> 链接:C:\Users\DarekSz\Praca\cci\Debug\masksample.exe未找到或未由上一个增量链接生成;执行完整链接
1> 嵌入清单…
1> 掩码示例-0个错误,0个警告
=======生成:1成功,0失败,1最新,0跳过==========

然后我继续构建另一个:

1> ------已开始构建:项目:calibsample,配置:调试Win32------
1> 编译…
1> stdafx.cpp
1> 编译…
1> calibsample.cpp
1> 正在将清单编译为资源…
1> 链接…
1> 链接: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> 校准样本-0个错误,0个警告
=======生成:1成功,0失败,1最新,0跳过==========


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

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

有点晚了,但可能其他人会发现此提示很有用

<我不是C++大师……/P> 在我的解决方案中,我有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文件包含到非dll项目中,只需定义_DO_NOT_导出条件即可

#define _DO_NOT_EXPORT
#include "MyClass.h"

从可执行文件导出函数是什么意思?就像从DLL导出函数一样,也可以从可执行文件导出函数。我看不出可执行文件是如何导出函数的。它全部包含在main()中。我没有导出任何内容,vs也在创建lib和expfiles@Icebone1000您可以仅链接到使用declspec-s编译(未链接)的静态库(如果库可以构建为静态库或动态库,但管理预处理器定义配置错误,则可能会发生这种情况).哦,是的,我忘了在我的项目中做这个。。。谢谢你的回答这一切都是有道理的,但是为.exe的导出生成.exp和.lib的目的是什么呢?如何将该.exe作为.dll使用?在我的例子中,.exp和.lib是在我使用CUDA启动项目时创建的。这导致我的代码导出符号英伟达优化,以告诉OpthPUS驱动程序在运行这个.exe时选择NVIDIA GPU。请参阅中的详细信息,并注意,我是通过查看.exp文件中的字符串来诊断此问题的。与@AlltheRage类似,在我的例子中,这是由于我使用了一些第三方代码,它使用
\uu declspec(dllexport)
作为图形驱动程序的提示。见: