Win10 1803更新后WSL下编译C++出现间歇性‘文件未找到’错误
解决WSL Ubuntu 16.04.2编译C++间歇性头文件找不到的问题
刚看到你遇到的这个糟心问题——Win10 1803更新后,WSL里的gcc 4.8或clang 3.8编译时总是间歇性报头文件找不到,比如boost的那些头文件。这个坑我之前帮朋友踩过,大概率是1803版本给WSL带来的文件系统交互bug导致的,尤其是当你的依赖库(比如boost)放在Windows挂载分区(/mnt/c这类)的时候。下面给你几个亲测有效的解决方案:
把依赖库移到WSL本地文件系统
WSL访问本地Linux文件系统(比如/home/你的用户名目录下)的稳定性比挂载的Windows分区高太多,1803更新后这个差异被放大了。你可以用cp -r把boost整个目录复制到WSL本地,比如:cp -r /mnt/c/your-boost-path /home/yourusername/boost然后编译时显式指定头文件路径:
g++ -I/home/yourusername/boost/include your-code.cpp -o output这样基本能杜绝间歇性找不到文件的问题。
修改WSL挂载配置,禁用不稳定的缓存
1803版本的WSL在挂载Windows分区时的缓存机制有bug,你可以通过新建/修改/etc/wsl.conf来调整:- 先打开配置文件:
sudo nano /etc/wsl.conf - 添加以下内容:
[automount] options = "metadata,umask=0000,case=off" mountFsTab = false - 保存退出后,完全关闭WSL(在Windows任务管理器里找到ubuntu.exe进程结束掉),再重新打开WSL。这个配置会让WSL挂载Windows分区时使用更稳定的元数据处理,减少缓存导致的文件丢失问题。
- 先打开配置文件:
重新安装编译器,修复配置关联
Win10更新可能间接破坏了WSL里编译器的配置文件,试试重新安装gcc 4.8和clang 3.8:sudo apt-get purge gcc-4.8 clang-3.8 sudo apt-get autoremove sudo apt-get install gcc-4.8 clang-3.8重新安装后,编译器的头文件搜索路径配置会被重置,能解决一些隐性的路径关联问题。
验证头文件路径和编译器搜索逻辑
先确认头文件确实存在:find / -name "fold_left.hpp"然后用
-v参数查看编译器的头文件搜索路径,确认你的依赖路径是否在其中:g++ -v your-code.cpp如果路径没被包含,一定要用
-I显式指定,别依赖环境变量(1803更新后环境变量也可能出现间歇性读取问题)。
内容的提问来源于stack exchange,提问作者Andrew Medlin
相关产品推荐
相关产品推荐

