情况
在 Visual Studio 2017 社区版中,我们安装了“Visual C++ ATL 支持”以及 MFC 和 ATL 支持。在我们的 x64 项目中仍然出现错误。
解决方案
我们使用以下两个命令修复了一些路径:
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC>mklink /d atlmfc "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.11.25503\atlmfc"
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.11.25503\atlmfc\lib>mklink /d amd64 "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.11.25503\atlmfc\lib\x64
详情
我们最终在C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.11.25503\atlmfc\include 中找到了标题atlbase.h。 vsvars32.bat 根本没有将这个路径添加到 VC 的 Include 目录中,所以在构建过程中找不到头文件。
vsvars32.bat 包含以下行:
@if exist "%VCINSTALLDIR%ATLMFC\INCLUDE" set INCLUDE=%VCINSTALLDIR%ATLMFC\INCLUDE;%INCLUDE%`.
这在我们的机器中解析为C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\atlmfc\include。
我们创建了一个目录连接,因此构建工具在预期的目录中找到atlbase.h(这是上面解决方案部分的第一个命令):
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC>mklink /d atlmfc "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.11.25503\atlmfc"
之后,链接器没有找到atls.lib(参见Cannot Open File atls.lib)。这是由于预期的文件结构是 lib 应该直接包含 x86 版本的库,lib\amd64 应该包含 x64 变体。相反,lib\x86 包含 x86 版本,lib\x64 包含 64 位版本。由于我们构建的是 64 位项目,创建另一个目录垃圾从 amd64 到 x64 解决了问题:
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.11.25503\atlmfc\lib>mklink /d amd64 "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.11.25503\atlmfc\lib\x64