【发布时间】:2020-06-06 04:20:57
【问题描述】:
在一台装有 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 的服务器会打印该错误消息
【问题讨论】:
-
既然您说您最近升级了工具链,那么您的测试是否有可能针对部分或全部由旧工具链构建的对象运行?
-
@JohnBollinger python3的安装肯定是以前版本的gcc构建的-我应该重新安装吗?
-
@JohnBollinger 我用当前版本的 gcc 删除并重新安装了 python3,但没有运气。
-
除非 Python 解释器是被测试的代码——我不认为是这种情况——这不是我要说的。 Python 会考虑到这一点并不是不可能的,但我所说的是您正在构建和测试的扩展,它是使用用于覆盖分析的仪器构建的。请确保 that 是从其源代码干净地构建的。为此,请注意它可能依赖的任何静态库。
-
@JohnBollinger 明白了,谢谢。此 C 扩展所依赖的主要静态库尚未在此服务器上重建。我会在我们升级的另一台已经重建的服务器上试试这个,然后通知你。
标签: python c gcc python-c-api gcov