gcov:从共享库生成.gcda输出?

时间:2010-09-14 21:05:25

标签: c++ gcc code-coverage automake gcov

是否可以通过运行链接到使用.gcda选项构建的共享库的可执行文件来生成gcov数据文件(--coverage文件)?

基本上,我的主库包含多个编译成一个共享库的c ++文件,然后是一个名为“test”的子目录,其中包含一个链接到并测试主库的测试程序。一切都编译好,并为库源文件和测试源文件生成.gcno文件。 .gcda文件仅为测试源文件生成,但我确实需要它们用于编译到共享库中的实际源文件。

有什么想法吗?

其他信息:

  • 这是所有C ++代码
  • 使用automake生成的make脚本构建所有内容
  • 在共享库Makefile.am中为lib_la_CPPFLAGS和lib_la_LDFLAGS指定了--coverage选项
  • 在测试可执行文件Makefile.am中为AM_CPPFLAGS和AM_LDFLAGS指定了--coverage选项
  • 测试源文件使用Google Test(C ++单元测试框架)

1 个答案:

答案 0 :(得分:26)

我终于通过gcc人员的帮助解决了这个问题。请参阅此处的主题:http://gcc.gnu.org/ml/gcc-help/2010-09/msg00130.html

事实证明.gcda文件被放在.libs目录中,因为那是共享库(.so)文件所在的位置。为了让gcov生成输出,我不得不将.gcda文件向上移动到源文件所在的位置。

此外,这是一个类似的主题,其他人遇到了一些相同的问题:can gcov deal with shared object?