GCOV 版本不匹配 - 预期 700e 得到 408R

GCOV Version mismatch - expected 700e got 408R

在一台装有 GCC 4.4.7/GCOV 4.4.7 的服务器上,我能够 运行 测试成功。但是,在装有 GCC 4.8.5/GCOV 4.8.5 的不同服务器上,运行测试导致此错误:

profiling:/path/to/foo.gcda:Version mismatch - expected 700e got 408R

以下是版本的输出:

$ gcc --version
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-36)

$ gcov --version
gcov (GCC) 4.8.5 20150623 (Red Hat 4.8.5-36)

查了下这个错误,好像是gcc和gcov版本不匹配导致的,我的是一样的

我们最近将这台服务器上的 gcc 从 4.4.7 升级到 4.8.5。这个问题好像是升级导致的。

我应该提到我正在测试一个 Python C 扩展,我认为它与测试一个普通的 C 应用程序有点不同。

我执行以下操作:

export CFLAGS="--coverage"
python setup.py build_ext --inplace
python tests.py

在两台服务器上,第二个命令会适当地创建 .gcno 文件。

在4.4.7的服务器上,第三条命令会成功创建.gcda文件。但是 4.8.5 的服务器打印出错误信息

一个版本的 GCC 生成的覆盖检测与其他版本生成的覆盖检测不完全兼容,因此 GCC 对其进行了版本化。报告的错误消息似乎表明您正在使用一个版本的工具链针对至少部分使用不同版本构建的工件和工具执行覆盖率分析。

要解决此问题,您应确保所有已检测的二进制文件(包括任何库)和任何其他与覆盖率相关的构建工件都是通过同一版本的工具链生成的。从被测组件的源代码完全干净地重建——包括任何检测过的库,无论是否属于同一构建——应该可以解决问题。但是,可能没有必要重建尚未检测覆盖率测试的二进制文件。