【问题标题】:Intermittent, random 'file not found' errors under Windows Subsystem for Linux (WSL)Windows Subsystem for Linux (WSL) 下的间歇性、随机“找不到文件”错误
【发布时间】:2018-10-16 19:52:27
【问题描述】:

当包含 C++ 头文件时,在 Windows 子系统 (WSL) 中运行的 Ubuntu 16.04.2 下使用 gcc 4.8 或 clang 3.8 构建 C++ 应用程序时出现间歇性“致命错误:...找不到文件”错误,但仅在几天前安装了 Windows 10 April 更新(版本 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

我说错误是间歇性的,因为如果我重新运行构建,中断构建的特定错误就会消失,并且构建会运行一段时间,直到它成功构建或随机无法包含其他文件相同类型的“找不到文件”错误。

这个错误的时间和它的随机性让我怀疑这是 WSL 中的一个新错误。其他人看到此问题或对如何解决此问题有建议?

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

【问题讨论】:

  • 共享卷是格式化为 NTFS 的 1 TB SSD,在 Windows 10 中挂载为 D: 驱动器。我的 PC 的 C: 和 D: 驱动器出现在路径 /mnt/c 下的 Ubuntu 安装中/mnt/d 分别。请记住,在 Windows 10 更新之前,这一切都有效。
  • 我尝试完全卸载并使用 Windows 应用商店中的最新版本重新安装 WSL,并从头开始设置我的 WSL Ubuntu,但问题仍然存在。
  • 刚刚获取了最新的补丁,现在在 Windows 10 OS Build 17134.48 上(在此处记录 [support.microsoft.com/en-us/help/4103721/…),但这并没有解决问题。
  • 我有同样的问题,这台机器上只有一个 SSD 驱动器,通过 /mnt/c 访问文件。我正在做相当大的编译,它似乎是一个随机文件(通常是一个常见的使用的标题)“缺失”。
  • 是的。每个 176xx 修复程序都将在 2018 年秋季更新中面向所有人发布。

标签: c++ gcc boost clang windows-subsystem-for-linux


【解决方案1】:

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

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

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

【讨论】:

  • 使用单线程构建对我来说很有效,所以这看起来是一个可行的解决方法。
  • 您现在应该将此标记为已接受的答案,这样每个人都知道有可行的解决方案
  • Build 18363 中仍然存在此问题。可能原因不同,但我得到随机文件未找到错误。在 cd .. 和 cd back 文件可见之后。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    为什么会这样:

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

    修复:

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

    【讨论】:

      猜你喜欢
      • 2018-03-17
      • 2019-02-11
      • 2016-12-13
      • 2021-02-23
      • 1970-01-01
      • 2021-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多