我最近使用gcov来收集代码覆盖率信息。 gcov与可执行应用程序:)配合良好,但是当我尝试加载.so文件时,我收到此错误:未知符号__gcov_merge_add。
然后我在Google上搜索,有人说将-lgcov添加到链接标志(LDFLAGS),我确实添加了这个选项,但它没有用。我也试着在链接标志中使用--coverage选项,无法摆脱这个错误。
有人可以帮忙解决这个问题吗?
谢谢。
答案 0 :(得分:5)
我也遇到了这个问题,但后来解决了这个问题。我只在CPPFLAGS和LDFLAGS中使用--coverage选项。我认为应该为你处理编译问题。
共享对象似乎仍然不会产生.gcda文件,我不知道如何解决这些问题。就像你说的,它适用于可执行文件,但共享对象似乎有一些问题。
修改强> 显然,gcov现在支持共享对象。我昨天做了大量的研究,发现了相互矛盾的答案,所以我邮寄了gcc-help列表。请参阅此处的主题:http://gcc.gnu.org/ml/gcc-help/2010-09/msg00130.html。我还没有根据答案尝试解决我的问题,但是当我这样做时我会回复。
编辑2: 共享对象可以使用gcov(或者使用gcc的--cover选项)。这里还有另一篇详细信息:gcov: producing .gcda output from shared library?。它也引用了上面的相同线程。