获取“无法打开包含文件:'atlbase.h':没有此类文件或目录”错误

时间:2013-12-11 17:35:29

标签: c++ visual-studio-2013 atl include-path

我正在交换机器(在两台Windows 8.1笔记本电脑之间),刚刚从TFS加载了我正在处理的项目。在一台机器上它编译,另一台机器没有编译,并给出第一个错误

error C1083: Cannot open include file: 'atlbase.h': No such file or directory

在两台笔记本电脑上,我正在运行Visual Studio Ultimate 2013.在第一台笔记本电脑上,我检查了它在哪里取出atlbase.h,它来自C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\atlmfc\include,即来自Visual Studio 2012安装目录。在新机器上,我没有安装Visual Studio 2012,因此目录C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\atlmfc\include不存在。

其他人也有类似问题(例如Ramilol's question),因为他们使用的是Visual Studio Express。我正在使用Ultimate。

这可能是一个环境变量问题(如suggested by raj raj),但VC++ Directories下的包含目录路径是$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSDK_IncludePath)所需的。

我的一般问题是“我该如何解决这个问题?”但是我也有兴趣知道我如何检查并设置$ {VCInstallDir)的值,因为C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include确实有atlbase.h(因此我对于为什么它没有被拾取而感到困惑)。

==========编辑1:重写==========

让我再说一遍这个问题。

我已将Visual Studio 2013项目从TFS加载到新的构建笔记本电脑上。它不会构建并提供error C1083: Cannot open include file: 'atlbase.h': No such file or directory之类的错误。文件atlbase.h出现在新计算机的C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include目录中。

在我的项目属性中,VC++ Directories下的包含目录路径为$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSDK_IncludePath)

如何检查这些宏的设置,以及它们是否在atlbase.h之内(即C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include)我该如何解决?

==========编辑2:安装了Microsoft Visual C ++ Redistributables ==========

响应jp2code's answer工作的机器和没有安装类似的Microsoft Visual C ++ Redistributables数组的机器,如下面的屏幕截图所示(工作机器在左侧):

MSVC++RedistScreenshot

==========编辑3:环境变量==========

his answer, pje中解释了如何查找环境变量。 %VCInstallDir%已正确设置为C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\但如果我右键点击#include <atlbase.h>行,我会收到此错误,表明尽管%VCInstallDir%正确,但这不是VS正在寻找的地方:

open file error screenshot

==========编辑4:平台工具包设置==========

另一种可能性是Configuration Properties | General | Platform Toolset项目设置,由manuell在评论和Michael Burr in his answer中提出。对于项目,它设置为Visual Studio 2012 (v110),但下拉列表中列出的唯一其他选项是v110_wp80,选中后,该选项将变为Windows Phone 8.0 (v110)。如果我在记事本中手动编辑.vcxproj文件并在Visual Studio Ultimate 2013中重新打开项目,则属性页面现在将平台工具集列为Visual Studio 2013 (v120) (not installed)

如果我启动一个新的C ++ Windows Store项目,我可以毫无问题地将Platform Toolset设置为Visual Studio 2013 (v120),实际上它是下拉列表中列出的唯一选项。 (N.B.新项目已将Target Platform Version设置为“Windows 8.1”,并且它显示为灰色,因此我无法更改它,而失败的项目将其设置为Windows 8。)

==========编辑5:整个项目设置文件==========

在评论中Michael表示“可能在某处发布.vcxproj(就像github上的gist)可能会有所帮助”。我发布了here

==========编辑6:卸载并重新安装Visual Studio 2013 Ultimate ==========

没有效果,同样的错误再次出现。

5 个答案:

答案 0 :(得分:9)

  

在新机器上我没有安装Visual Studio 2012

好吧,不要再看了,这是你的问题。您的项目以VS2012工具集为目标,以构建在Windows 8.0上运行的Store项目。您仍然可以在VS2013中打开它,但只有安装了VS2012才能构建它。换句话说,您必须在机器上使用v110工具集。你没有。

安装VS2012后,您必须重新定位到8.1才能使用VS2013工具集(v120)进行构建。右键单击Solution Explorer窗口中的Solution节点,然后选择“将Windows应用商店项目重新定位到Windows 8.1”。

对于那台笔记本电脑有点担心,它对VS2012的记忆太多了。听起来它曾经安装过但没有正确卸载。

答案 1 :(得分:5)

如果要查看$(VCInstallDir)或任何其他Visual Studio宏的值,请打开VS2013的开发人员命令提示符(这应该与VS 2013安装一起安装)。在提示符下键入:echo %VCInstallDir%。这将打印$(VCInstallDir)宏的当前值。如果要将其更改为其他目录,请键入set VCInstallDir=<directory path>,其中<directory path>是所需目录的路径(在您的情况下可能是C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include)。

希望这有帮助,欢呼!

------ -------编辑
作为旁注,这些宏可能是使用您尝试加载并使用2013编译的2012项目导入的。如果事实证明它是您的$(VCInstallDir)宏错误,那么这可以解释为什么

答案 2 :(得分:5)

检查“配置属性|常规|平台工具集”项目设置是否为:

Visual Studio 2013 (v12)

而不是“Visual Studio 2012(v110)

答案 3 :(得分:4)

可能的解决方案

  1. 获取Process Monitor
  2. 过滤atlbase.h
  3. 通过这种方式,您将确切地知道Visual Studio正在寻找的位置atlbase.h。进程监视器将显示失败的文件打开尝试。

    此时您将能够通过

    解决问题
    1. 制作符号链接(凌乱)
    2. 修复包含目录路径(更好)

    3. <强>更新 以下是过滤文件操作的方法:

      filter settings

      设置过滤器参数后,请不要忘记单击添加

答案 4 :(得分:3)

检查两台计算机是否安装了相同版本的C ++ Redistributable。

值得一试,并且很容易检查。

screenshot