在 visual studio linux c++ 项目中包含任何 stl 库时出现“此配置不支持 128 位浮点类型”错误

"128-bit floating-point types are not supported in this configuration" error when including any stl library in visual studio linux c++ project

所以我使用 wsl 在我的 x64 位 win 10 pro 10.0.17134 上创建了一个 c++ linux 控制台应用程序。

项目编译没有问题,没有显示任何错误。调试基本变量赋值按预期工作;

然后当我尝试包含任何 stl 库时,例如#include <iostream> 我收到以下错误

128-bit floating-point types are not supported in this configuration

我正在使用 x64 位模式的调试配置。 我也试过谷歌搜索错误,但我似乎找不到任何相关的答案

我也尝试过使用不同的 c++ 版本(c++17、c++11 等...),但我仍然遇到相同的错误。

但即使我遇到这些编译错误,程序仍然可以正常运行。

编译器和标准库是不同的东西。

您看到的是一个不支持 128 位整数的编译器试图使用需要支持 128 位整数的标准库。

问题可能是 Intelisense 问题,其中 Intelisense 不知道您的编译器支持 128 位整数或无法正确排除它或其他原因。您的图片显示您看到了 Build 和 Intelisense 错误;如果构建成功,则表示这些是 Intelisense 错误。

Intelisense 是 MSVC 工具,它会尝试解析并确定您的 C++ 代码中是否存在错误。它不使用您的编译器;相反,它使用快速的第 3 方编译器。

关闭 Intelisense 可能是摆脱这些问题的最简单方法。训练 Intelisense 使其理解“正确的”headers 是可能的,但相当困难,并且可能需要很多 programmer-year 项目。

一个快速的破解方法是将您的 stdafx.h 预编译 header,然后执行

#ifdef __INTELLISENSE__ 
using __float128 = long double; // or some fake 128 bit floating point type
#endif

但这可能是一个无休止的螺旋。

可能还有一些方法可以让智能感知忽略某些文件中的错误。

如果和你其他的代码不冲突,你可以设置 __CUDACC__ 在 项目属性 |配置属性 > C/C++ > 智能感知 |预处理器定义

如果您使用的是 GCC headers。其他来源的开关可能不同。

作为提示,您可以将错误输出设置为仅构建。默认是Build + Intellisense,正如上面的答案所示,不一定是你想要的。