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

Windows11虚拟机Cygwin64+MinGW64环境下gcov无法生成gcda文件

Windows环境下MinGW编译gcov覆盖率文件生成失败问题

环境背景

  • M1芯片Mac上相关操作正常,需确保程序可在Windows环境构建
  • 使用Windows 11虚拟机,手动安装SSH-Server后通过SSH连接操作

Cygwin及构建工具安装步骤

  1. 下载setup-x86_64.exe
  2. 执行基础安装命令:
    $exePath -qnNdO -R C:/cygwin64 -s http://cygwin.mirror.constant.com -l C:/cygwin64/var/cache/setup
    
  3. 切换到bash环境
  4. 安装构建工具:
    • 配置setup别名:
      alias setup="/cygdrive/c/cygwin64/setup-x86_64.exe -qnNdO -R C:/cygwin64 -s http://cygwin.mirror.constant.com -l C:/cygwin64/var/cache/"
      
    • 安装依赖包:
      setup -P autoconf -P automake -P make -P git -P gperf -P gcovr -P coreutils -P mingw64-x86_64-gcc-g++ -P mingw64-x86_64-yaml -P mingw64-x86_64-boost -P mingw64-x86_64-dlfcn
      
    • 建立软链接:
      ln -s /cygdrive/c/cygwin64/bin/x86_64-w64-mingw32-g++.exe /cygdrive/c/cygwin64/bin/g++
      ln -s /cygdrive/c/cygwin64/usr/x86_64-w64-mingw32/bin/ar.exe /cygdrive/c/cygwin64/bin/ar.exe
      

测试程序编译及运行过程

测试代码test.cpp:

#include <iostream>

int main(int argc, char* argv[])
{
    if (argc % 2 == 0) {
        std::cerr << "We have a 0\n";
    }
    else {
        std::cerr << "We have a 1\n";
    }
}

编译及运行命令:

# 查看文件
$ ls -la
total 378
drwxrwxrwx+ 1 Loki   None        0 May 16 16:23 .
drwxrwx---+ 1 SYSTEM SYSTEM      0 May 16 15:39 ..
-rw-r--r--+ 1 Loki   None      161 May 16 15:38 test.cpp

# 编译
g++ -c test.cpp -g -fprofile-arcs -ftest-coverage -coverage
g++ -o done test.o -g -fprofile-arcs -ftest-coverage -coverage -lgcov

# 首次运行
PATH=/cygdrive/c/cygwin64/usr/x86_64-w64-mingw32/sys-root/mingw/bin/ ./done.exe 1
We have a 0
libgcov profiling error:/cygdrive/c/Users/Loki/G/test.gcda:overwriting an existing profile data with a different timestamp

# 查看文件(无test.gcda)
ls -la 
total 378
drwxrwxrwx+ 1 Loki   None        0 May 16 16:23 .
drwxrwx---+ 1 SYSTEM SYSTEM      0 May 16 15:39 ..
-rwxr-xr-x+ 1 Loki   None   338149 May 16 16:23 done.exe
-rw-r--r--+ 1 Loki   None      161 May 16 15:38 test.cpp
-rw-r--r--+ 1 Loki   None     1692 May 16 16:23 test.gcno
-rw-r--r--+ 1 Loki   None    19596 May 16 16:23 test.o

# 第二次运行
$ PATH=/cygdrive/c/cygwin64/usr/x86_64-w64-mingw32/sys-root/mingw/bin/ ./done.exe 1
We have a 0

# 再次查看文件(仍无test.gcda)
ls -la 
total 378
drwxrwxrwx+ 1 Loki   None        0 May 16 16:23 .
drwxrwx---+ 1 SYSTEM SYSTEM      0 May 16 15:39 ..
-rwxr-xr-x+ 1 Loki   None   338149 May 16 16:23 done.exe
-rw-r--r--+ 1 Loki   None      161 May 16 15:38 test.cpp
-rw-r--r--+ 1 Loki   None     1692 May 16 16:23 test.gcno
-rw-r--r--+ 1 Loki   None    19596 May 16 16:23 test.o

问题现象

  • 首次运行出现时间戳冲突报错,第二次运行无警告
  • 两次运行后均未生成预期的test.gcda覆盖率数据文件

解决思路

  1. 路径格式适配:MinGW生成gcda文件时可能无法正确解析Cygwin风格路径,尝试将程序放在MinGW原生路径下,或使用Windows原生路径(如C:\Users\Loki\G\done.exe)运行程序。
  2. 权限检查:确认程序运行目录有写入权限,test.gcda需要程序运行时能写入当前目录或指定输出目录。
  3. 版本一致性:确保编译用的MinGW gcc与运行时依赖的libgcov版本完全匹配,避免版本不兼容导致文件生成失败。
  4. 显式指定输出路径:编译时添加-fprofile-dir=C:/Users/Loki/G/参数,用Windows原生格式指定gcda文件输出目录。
  5. 清理残留文件:首次报错提示时间戳冲突,可能存在未显示的旧gcda文件,彻底清空目录后重新编译运行。

内容的提问来源于stack exchange,提问作者Loki Astari

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 14:57:48