4

我最近使用 gcov 来收集代码覆盖率信息。gcov 与可执行应用程序配合得很好 :) ,但是当我尝试加载 .so 文件时,出现此错误:未知符号 __gcov_merge_add。

然后我在谷歌上搜索,有人说将 -lgcov 添加到链接标志(LDFLAGS),我确实添加了这个选项,但它没有用。我还尝试了链接标志中的 --coverage 选项,无法摆脱此错误。

有人可以帮助解决这个问题吗?

谢谢你。

4

1 回答 1

5

我也遇到了这个问题,但后来解决了。我只是在 CPPFLAGS 和 LDFLAGS 中都使用了 --coverage 选项。我认为这应该为您解决编译问题。

共享对象似乎仍然没有生成 .gcda 文件,我不确定如何解决这些问题。就像你说的,它适用于可执行文件,但共享对象似乎有一些问题。

编辑: 显然,gcov 现在确实支持共享对象。昨天我做了大量的研究,发现了相互矛盾的答案,所以我邮寄了 gcc-help 列表。请参阅此处的线程:http: //gcc.gnu.org/ml/gcc-help/2010-09/msg00130.html。我还没有尝试根据答案解决我的问题,但是当我这样做时我会回复。

编辑 2: 共享对象确实可以与 gcov 一起使用(或者而不是使用 gcc 的 --cover 选项)。这里还有另一篇详细信息:gcov:从共享库生成 .gcda 输出?. 它还引用了上面的相同线程。

于 2010-09-14T20:29:13.833 回答