You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MinGW GCC在WSL文件系统下无法启用coverage编译的问题

解决MinGW GCC在WSL文件系统上生成coverage文件失败的问题

问题背景

在WSL2 Ubuntu 22.04环境下,将WSL中的Git仓库映射为Windows盘符后,使用MSYS2各版本GCC(14.2.0、12.2、10.4)执行gcc --coverage编译时,会生成0字节的.gcno文件并报错cannot open *.gcno,但常规编译无异常。需求是无需在WSL与Windows间复制源码,保留GCC的--coverage选项完成构建。

可行解决方案

1. 切换到WSL1

WSL1的文件系统与Windows兼容性更强,不存在WSL2中9p协议处理特定文件操作的限制:

  • 关闭WSL:wsl --shutdown
  • 将Ubuntu发行版切换为WSL1:wsl --set-version Ubuntu-22.04 1
  • 重启WSL后重新映射盘符并尝试编译

2. 调整WSL2的9p挂载参数

修改WSL2的挂载配置,优化文件权限与元数据处理逻辑:

  • 在Windows用户目录(C:\Users\<你的用户名>)下创建或编辑.wslconfig文件,添加以下内容:
    [wsl2]
    options="metadata,umask=0022,fmask=0022,uid=1000,gid=1000"
    
  • 执行wsl --shutdown关闭WSL后重启,再尝试编译

3. 在WSL内完成带coverage的编译

直接在WSL环境中用GCC执行编译,生成的可执行文件与.gcno文件可通过映射盘符直接供Windows使用:

gcc --coverage test.c -o test.exe

编译完成后,Windows端可直接访问映射盘符中的产物,后续coverage统计流程不受影响

4. 指定coverage文件输出到Windows本地磁盘

通过GCC参数将.gcno文件定向到Windows本地目录,绕过WSL文件系统的兼容性问题:

gcc --coverage test.c -o X:\test\test.exe -fprofile-dir=C:\temp\coverage

需提前创建C:\temp\coverage目录,确保GCC有写入权限

内容的提问来源于stack exchange,提问作者Dmitry Grigoryev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 14:03:22