Linux (WSL) Windows 子系统下的间歇性随机 'file not found' 错误

Intermittent, random 'file not found' errors under Windows Subsystem for Linux (WSL)

我在 Windows Windows 子系统中使用 gcc 4.8 或 clang 3.8 在 Ubuntu 16.04.2 运行ning 下构建 C++ 应用程序时出现间歇性 'fatal error: ... file not found' 错误=36=] (WSL),当包含 C++ 头文件时,但只是在几天前安装了 Windows 4 月 10 日更新(版本 1803,OS Build 17134.1)之后。

来自 clang 编译器的示例错误消息:

fatal error: 'boost/preprocessor/list/fold_left.hpp' file not found

来自 gcc 编译器的示例错误消息:

fatal error: boost/mpl/aux_/at_impl.hpp: No such file or directory

我说这个错误是间歇性的,因为如果我重新 运行 构建,中断构建的特定错误就会消失,并且构建 运行s 会持续一段时间,直到它构建成功或随机地无法包含具有相同类型 'file not found' 错误的其他文件。

这个故障的发生时间和随机性让我怀疑这是WSL的一个新bug。还有其他人看到这个问题或对如何解决它有建议吗?

错误并不总是出现在 Boost 包含文件中,而通常仅仅是因为 Boost 包含了整个包含文件的很大一部分。正在构建的文件存在于 /mnt/d/.

下的共享卷上

这已被确定为多线程错误 (https://docs.microsoft.com/en-us/windows/wsl/release-notes#build-17655-skip-ahead),应该会在以后的 windows 更新中得到修复。

由于这是一个多线程错误,因此可以通过不使用多线程构建来解决它。

如果赶时间,可以直接进入 windows 内部程序并使用其中一个预览版本。

在我的例子中,它不是多线程,而是工具链的路径。 失败案例是:工具链安装在 /mnt/c/.../tools/ 一个很好的例子是:工具链安装在 /home/yurir/tools/

我想 windows 文件夹与 ubuntu 文件夹的映射会造成一些混乱。

为什么会这样:

此间歇性问题可能是 Windows 的 快速启动导致的。此设置在 Windows 10 上默认启用:关机或重新启动时 Windows 只需重新加载 C:\hiberfile.sys 映像,然后锁定其驱动器分区以确保安全。 (在 NTFS 分区处于休眠状态时对其进行更改是有风险的。因此,如果挂载分区的 WSL 工具看到休眠标志,则不会以 Read/Write 模式挂载它。)

修复:

转到控制面板 > 硬件和声音 > 电源选项 > 找到“启用快速启动”的设置并取消选中该选项。重新启动计算机,您应该可以访问磁盘。