英特尔编译器使用错误 header
Intel Compiler uses wrong header
我试图找出为什么 Intel Compiler 18.0
在我的 Visual Studio 2017 安装后 安装 使用 header 文件MSVC
,而不是它自己的(因为它会导致错误)。
当在 Visual Studio
中的 C++ 项目中编译时,一个简单的 #include <vector>
在原本为空的翻译单元中触发此错误
1>C:\Program Files (x86)\Microsoft Visual Studio17\Professional\VC\Tools\MSVC.16.27023\include\type_traits(1562): error : expected a ">"
1> _INLINE_VAR constexpr bool _Is_specialization_v<_Template<_Types...>, _Template> = true;
只是为了确定,为什么它仍然使用 MSVC
包含?重新安装不会导致任何更改。我根本无法弄清楚,为什么会导致这个问题。有什么想法吗?
听起来您需要为使用英特尔编译器的配置关闭 "Conformance Mode" (/permissive-
)! (此模式强制更严格地遵守标准,这是英特尔 C++ 在使用 STL 的 MSVC 实现时无法处理的。)
右键单击项目:属性 -> C/C++ -> 语言然后 select "No" 为一致性模式。
About the error message you got:
我认为您遇到了与this one, in most time this issue is caused by the incompatibility between Intel Parallel Studio XE version
and VS version
. Just like what I suggested in your 相同的问题,您需要安装更高版本的 Intel Parallel Studio XE 版本才能解决该问题。
Just to be sure, why is it using the MSVC includes anyway? A
reinstallation did not result in any change. I simply can't figure
out, why it's causing this problem. Any ideas?
英特尔 C++ 编译器为 VS 提供扩展。您可以在 Tools=>Extensions and Updates
:
中查看
同意 Adrian 的 I don't think Intel would want to 'take ownership' of MFC
。对于一个简单的C++项目,如果我们将Intel C++编译器设置为它的编译器,背后究竟会发生什么?让我们看看项目文件(xx.vcxproj):
它设置了 <PlatformToolset>Intel C++ Compiler 19.0</PlatformToolset>
,并且可能对 xx.vcxproj
进行了一些其他更改,但该项目在其项目文件中仍然具有 <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
、<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
等定义.
所以一些特性,关于 MSVC 的定义仍然会在构建过程中导入。这就是为什么您收到的错误消息包含 MSVC
...
注:
MSbuild是VS的构建引擎,它读取xx.vcxproj
的内容编译构建工程。
正常 C++ 构建过程中有许多任务、属性和项目在导入的目标文件中定义,如 Microsoft.Cpp.Default.props
、$(VCTargetsPath)\Microsoft.Cpp.targets
等。
当我们 right-click project=>Intel Compiler=>Use Intel C++
时,它更改了 platformToolSet 设置,但它仍然导入 xx.cpp.targets 作为构建过程的一部分。因此,您可以在构建输出中看到有关 MSVC 或内容的错误消息。
我试图找出为什么 Intel Compiler 18.0
在我的 Visual Studio 2017 安装后 安装 使用 header 文件MSVC
,而不是它自己的(因为它会导致错误)。
当在 Visual Studio
中的 C++ 项目中编译时,一个简单的#include <vector>
在原本为空的翻译单元中触发此错误
1>C:\Program Files (x86)\Microsoft Visual Studio17\Professional\VC\Tools\MSVC.16.27023\include\type_traits(1562): error : expected a ">"
1> _INLINE_VAR constexpr bool _Is_specialization_v<_Template<_Types...>, _Template> = true;
只是为了确定,为什么它仍然使用 MSVC
包含?重新安装不会导致任何更改。我根本无法弄清楚,为什么会导致这个问题。有什么想法吗?
听起来您需要为使用英特尔编译器的配置关闭 "Conformance Mode" (/permissive-
)! (此模式强制更严格地遵守标准,这是英特尔 C++ 在使用 STL 的 MSVC 实现时无法处理的。)
右键单击项目:属性 -> C/C++ -> 语言然后 select "No" 为一致性模式。
About the error message you got:
我认为您遇到了与this one, in most time this issue is caused by the incompatibility between Intel Parallel Studio XE version
and VS version
. Just like what I suggested in your
Just to be sure, why is it using the MSVC includes anyway? A reinstallation did not result in any change. I simply can't figure out, why it's causing this problem. Any ideas?
英特尔 C++ 编译器为 VS 提供扩展。您可以在 Tools=>Extensions and Updates
:
同意 Adrian 的 I don't think Intel would want to 'take ownership' of MFC
。对于一个简单的C++项目,如果我们将Intel C++编译器设置为它的编译器,背后究竟会发生什么?让我们看看项目文件(xx.vcxproj):
它设置了 <PlatformToolset>Intel C++ Compiler 19.0</PlatformToolset>
,并且可能对 xx.vcxproj
进行了一些其他更改,但该项目在其项目文件中仍然具有 <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
、<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
等定义.
所以一些特性,关于 MSVC 的定义仍然会在构建过程中导入。这就是为什么您收到的错误消息包含 MSVC
...
注:
MSbuild是VS的构建引擎,它读取
xx.vcxproj
的内容编译构建工程。正常 C++ 构建过程中有许多任务、属性和项目在导入的目标文件中定义,如
Microsoft.Cpp.Default.props
、$(VCTargetsPath)\Microsoft.Cpp.targets
等。当我们
right-click project=>Intel Compiler=>Use Intel C++
时,它更改了 platformToolSet 设置,但它仍然导入 xx.cpp.targets 作为构建过程的一部分。因此,您可以在构建输出中看到有关 MSVC 或内容的错误消息。