Windows子系统Linux(WSL)下出现间歇性、随机的“文件未找到”错误。

22
在使用gcc 4.8或clang 3.8在运行Windows Subsystem for Linux (WSL)中的Ubuntu 16.04.2构建C++应用程序时,会出现间歇性的“致命错误:...文件未找到”错误,当包含C++头文件时发生,但只有自从几天前安装Windows 10四月更新(版本1803,OS Build 17134.1)后才出现这种情况。例如,来自clang编译器的错误信息是:“fatal error: 'boost/preprocessor/list/fold_left.hpp'文件未找到”,来自gcc编译器的错误信息是:“fatal error: boost/mpl/aux_/at_impl.hpp: No such file or directory”。我说这个错误是间歇性的,因为如果我重新运行构建,中断构建的特定错误就会消失,并且构建会继续运行一段时间,直到它要么成功构建,要么随机失败以与同类似的“文件未找到”错误无法包含某些其他文件。这个故障的时间和随机性使我怀疑这是WSL中的一个新错误。还有谁遇到过这种情况或有建议如何解决?错误可能不总是在Boost中,但通常是因为Boost占整个包含文件的大部分比例。正在构建的文件存在于/mnt/d/下的共享卷中。

1
共享卷是一个1TB的SSD,格式化为NTFS,在Windows 10下挂载为D:驱动器。我的PC的C:和D:驱动器在Ubuntu安装中出现在路径/mnt/c和/mnt/d下。记住这一切都能正常工作,直到Windows 10更新。 - Andrew Medlin
1
我尝试完全卸载并重新安装来自Windows Store的最新WSL,并从头开始设置我的WSL Ubuntu,但问题仍然存在。 - Andrew Medlin
1
刚刚获取了最新的补丁,现在使用的是Windows 10操作系统版本17134.48(详见[https://support.microsoft.com/en-us/help/4103721/windows-10-update-kb4103721]),但这并没有解决问题。 - Andrew Medlin
1
我有同样的问题,在这台机器上只有一个SSD驱动器,通过/mnt/c访问文件..我正在进行相当大的编译,似乎是一个随机的文件(通常是常用的头文件)“丢失”。 - Jari Komppa
2
是的。每个176xx修复程序都将在2018年秋季更新中发布给所有人。 - onoma
显示剩余8条评论
3个回答

17

使用单线程构建对我来说很有效,因此看起来是一个可行的解决方法。 - Andrew Medlin
2
你应该暂时将此标记为已接受的答案,这样每个人都知道有一个可行的解决方案。 - Tarun Lalwani
这个问题在Build 18363中仍然存在。可能原因不同,但我会收到随机的文件未找到错误。在cd ..和cd回来后,文件就可见了。 - Ádám Bozzay

0

为什么会发生这种情况:

这个间歇性问题可能是由于Windows的“快速启动”设置引起的。在Windows 10上,默认情况下此设置已开启:在关闭或重新启动时,Windows只需重新加载C:\hiberfile.sys映像,然后锁定其驱动器分区以进行安全保护。(在休眠状态下更改NTFS分区存在风险。因此,如果WSL工具看到休眠标志,则不会以读/写模式挂载分区。)

如何解决:

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


0
在我的情况下,问题不是多线程,而是工具链的路径。 失败的情况是:工具链安装在/mnt/c/.../tools/中。 成功的情况是:工具链安装在/home/yurir/tools/中。
我猜测Windows文件夹与Ubuntu文件夹之间的映射会导致一些混乱。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接