出现“无法打开包含文件:'atlbase.h':没有这样的文件或目录”错误
Posted
技术标签:
【中文标题】出现“无法打开包含文件:\'atlbase.h\':没有这样的文件或目录”错误【英文标题】:Getting "Cannot open include file: 'atlbase.h': No such file or directory" error出现“无法打开包含文件:'atlbase.h':没有这样的文件或目录”错误 【发布时间】:2013-12-29 20:03:36 【问题描述】:我正在交换机器(在两台 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:重新措辞 ==========
让我再尝试一下这个问题的措辞。
我已从 TFS 将 Visual Studio 2013 项目加载到新构建的笔记本电脑上。它不会构建并给出像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 阵列的机器,如下图所示(工作机器在左侧):
========== 编辑 3:环境变量 ==========
在his answer, pje 中解释了如何查找环境变量。 %VCInstallDir%
正确设置为 C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\
但是如果我右键单击行 #include <atlbase.h>
我会收到此错误,这表明尽管 %VCInstallDir%
是正确的,但这不是 VS 正在寻找的地方:
========== 编辑 4:平台工具包设置 ==========
另一种可能性是 Configuration Properties | General | Platform Toolset
项目设置,由 manuell 在 cmets 和 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)
,事实上它是下拉列表中列出的唯一选项。 (注意,新项目将 Target Platform Version
设置为“Windows 8.1”,它是灰色的,所以我无法更改它,而失败的项目将其设置为 Windows 8。)
========== 编辑5:整个项目设置文件==========
在 cmets Michael 中建议“也许将 .vcxproj 发布在某处(如 github 上的要点)可能会有所帮助”。我已经发布了here。
========== 编辑 6:卸载并重新安装 Visual Studio 2013 Ultimate ==========
没有效果,同样的错误再次出现。
【问题讨论】:
在这些机器上安装 VS2013 是一团糟。通常是由于它们具有早期版本(例如预览版或试用版),并且没有正确卸载它们。所以安装程序会随机跳过步骤,因为注册表中有一个已经存在的子包的内存。很难修复。 这是一个全新的版本 - 没有旧版本 ATL 与 Visual Studio 一起安装。如果您在寻找它们的 dfirectory 中没有 ATL 文件,那么也许您在安装 VS 时未选中相应的框...我想您需要去那里并通过安装程序进行修复,因为没有其他获取 ATL 的方法,而不是 [a more] 完整的 VS 安装。 正如我在问题中所说,我在C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include
中确实有 ATL 文件,这正是人们所期望的。但这不是 Visual Studio 正在寻找它们的地方。我怀疑它正在寻找第二台机器上不存在的 C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\atlmfc\include
,因为我在那台机器上只安装了 Visual Studio 2013。
常规属性中“平台工具集”的值是多少?
【参考方案1】:
在我没有安装 Visual Studio 2012 的新机器上
好吧,别再看了,那是你的问题。您的项目以 VS2012 工具集为目标,以构建在 Windows 8.0 上运行的 Store 项目。您仍然可以在 VS2013 中打开它,但只有在您安装了 VS2012 的情况下才能构建它。换句话说,您必须在机器上安装 v110 工具集。你没有。
在安装 VS2012 之后,您必须重新定位到 8.1 才能使用 VS2013 工具集 (v120) 构建它。右键单击解决方案资源管理器窗口中的解决方案节点,然后选择“将 Windows 应用商店项目重新定位到 Windows 8.1”。
对那台笔记本电脑有点担心,它对 VS2012 记得太多了。听起来它曾经安装过,但没有正确卸载。
【讨论】:
难道不希望从 2012 年到 2013 年有升级功能吗? 是的,我已经描述过了。 “重新定位 Windows 应用商店”菜单项。他们在支持 VS2013 中的目标 8.0 方面付出的努力非常少,这是可以理解的,当升级到 8.1 是免费的时。 我明白了。当我在新的 vs 版本中打开它们时,我已经习惯了一个完整的向导来开始修复我的项目并生成报告。 (另一方面,我也习惯于重新创建 vs 项目以使其正确) 汉斯——这很有趣。不幸的是,重新定位到 8.1 会发现(或导致)阻止项目构建的其他问题:error X5608: Compiled shader code uses too many arithmetic instruction slots (122)
但我可以着手解决这个问题【参考方案2】:
如果您想查看 $(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) 宏出错了,那么这就解释了原因.
【讨论】:
我检查了 %VCInstallDir% (感谢您解释如何做到这一点),在 两台 机器上它是C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC
这让我倍感困惑,为什么它是没有看到文件:-(
等等,它们是不同的。失败的机器缺少尾随``让我看看这是否有帮助......没有【参考方案3】:
检查“配置属性|常规|平台工具集”项目设置是:
Visual Studio 2013 (v12)
而不是像“Visual Studio 2012 (v110)”这样的东西
【讨论】:
它不是,它设置为Visual Studio 2012 (v110)
但下拉列表中列出的唯一一个选项是v110_wp80
,所选时,它将成为Windows Phone 8.0 (v110)
。鉴于 Visual Studio 2013 是机器上安装的唯一 Visual Studio 版本,我需要做什么才能获得您提到的 Visual Studio 2013 (v12)
平台工具集设置?奇怪的是,这个属性的 VS2013 页面只提到 Visual Studio 2012 作为一个选项:msdn.microsoft.com/en-us/library/8x480de8.aspx
项目是32位项目还是64位项目?此 VS2013 安装中是否安装了 64 位工具?新创建的 C++ 项目是否提供 VS213 (v120) 平台工具集?
另外,可能值得一试:关闭VS,备份然后在记事本中打开.vcxproj
文件,并将<PlatformToolset>v110</PlatformToolset>
的所有实例更改为<PlatformToolset>v120</PlatformToolset>
,然后看看VS2013做了什么。跨度>
如果这不是那么令人沮丧,那会很有趣。在记事本中编辑 .vcxproj 文件并在 Visual Studio Ultimate 2013 中重新打开项目后,属性页现在将平台工具集列为“Visual Studio 2013 (v120)(未安装)”。知道为什么 VS2013 认为 VS2013 没有安装吗?
@dumbledad:不知道。我认为重新安装是正确的(可能在卸载之后)。【参考方案4】:
可能的解决方案
-
获取Process Monitor
过滤
atlbase.h
这样您就可以准确地知道 Visual Studio 在哪里寻找 atlbase.h
。进程监视器会显示失败的文件打开尝试。
此时您将能够通过以下方式解决问题
-
制作符号链接(混乱)
修复包含目录路径(更好)
更新 以下是过滤文件操作的方法:
设置好过滤器参数后不要忘记点击添加。
【讨论】:
这听起来很有用,乔治。你如何按文件名过滤?我得到的过滤器可能性列表是体系结构、身份验证 ID、类别、...、用户、版本和虚拟化。细节和描述听起来可能,但现在没有。如何过滤altbase.h
?【参考方案5】:
检查两台机器是否安装了相同版本的 C++ Redistributable。
值得一试,而且很容易检查。
【讨论】:
它们不完全一样,但非常接近。我将在问题中添加屏幕截图。 Visual C++ Redistributables 不包含 ATL 标头。以上是关于出现“无法打开包含文件:'atlbase.h':没有这样的文件或目录”错误的主要内容,如果未能解决你的问题,请参考以下文章
统计一篇英文文章内每个单词出现频率,并返回出现频率最高的前10个单词及其出现次数
Pycharm连接MySQL后出现不出现数据库或表,出现其他文件的问题