Mat*_*sen 6 c python gcc gcov python-c-api
在一台装有 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
Run Code Online (Sandbox Code Playgroud)
以下是版本的输出:
$ 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)
Run Code Online (Sandbox Code Playgroud)
经过搜索,这个错误似乎经常是由 gcc 和 gcov 版本不匹配引起的,但我的版本是相同的。
我们最近将此服务器上的 gcc 从 4.4.7 升级到 4.8.5。这个问题似乎是由升级引起的。
我应该提到,我正在测试 Python C 扩展,我认为这与测试普通 C 应用程序有点不同。
我执行以下操作:
export CFLAGS="--coverage"
python setup.py build_ext --inplace
python tests.py
Run Code Online (Sandbox Code Playgroud)
在两台服务器上,第二个命令都会.gcno相应地创建文件。
在 4.4.7 的服务器上,第三个命令将成功创建 .gcda 文件。但是 4.8.5 的服务器打印该错误消息
GCC 的一个版本生成的覆盖率检测工具与其他版本生成的覆盖率检测工具并不完全兼容,因此 GCC 对其进行了版本化。报告的错误消息似乎表明您正在使用工具链的一个版本针对至少部分使用不同版本构建的工件和仪器执行覆盖率分析。
要解决此问题,您应该确保所有已检测的二进制文件(包括任何库以及任何其他与覆盖率相关的构建工件)都是通过同一版本的工具链生成的。从被测组件的源代码(包括任何已检测的库,无论是否属于同一构建的一部分)进行完全干净的重建应该可以解决问题。然而,可能没有必要重建尚未进行覆盖测试的二进制文件。