簡體   English   中英

Linux (WSL) Windows 子系統下的間歇性隨機“找不到文件”錯誤

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

I'm getting intermitting 'fatal error: ... file not found' errors building C++ application using either gcc 4.8 or clang 3.8 under Ubuntu 16.04.2 running in Windows Subsystem for Linux (WSL), when including C++ header files, but only自從幾天前安裝了 Windows 4 月 10 日更新(版本 1803,操作系統內部版本 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的一個新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 工具看到休眠標志,則不會以讀/寫模式掛載它。)

修理:

轉到控制面板> 硬件和聲音> 電源選項> 找到“打開快速啟動”的設置並取消選中該選項。 重新啟動計算機,您應該可以訪問該磁盤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM