gcov:从共享库生成 .gcda 输出?
Posted
技术标签:
【中文标题】gcov:从共享库生成 .gcda 输出?【英文标题】:gcov: producing .gcda output from shared library? 【发布时间】:2011-04-12 09:23:59 【问题描述】:是否可以通过运行链接到使用--coverage
选项构建的共享库的可执行文件来生成 gcov 数据文件(.gcda
文件)?
基本上,我的主库由多个 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】:我终于在 gcc 的帮助下解决了这个问题。请参阅此处的主题:http://gcc.gnu.org/ml/gcc-help/2010-09/msg00130.html。
事实证明 .gcda 文件被放置在 .libs 目录中,因为这是共享库 (.so) 文件所在的位置。为了让 gcov 产生输出,我必须将 .gcda 文件上移一级到源文件所在的位置。
另外,这里有一个类似的帖子,其他人遇到了一些相同的问题:can gcov deal with shared object?。
【讨论】:
@Tom:谢谢,我很高兴这对您有所帮助。我还应该注意 gcov 有一个 -o (--object-direct) 选项,它也可以用来指定 .gcda 文件的位置。 我想知道如果我移动共享库,lib 如何知道在哪里输出 gcda 文件。命令“strings liblib.so | grep gcda”让我清楚地知道 lib 在 lib 二进制文件中有输出路径。以上是关于gcov:从共享库生成 .gcda 输出?的主要内容,如果未能解决你的问题,请参考以下文章
可以让 gcc/gcov 将覆盖率统计信息输出到源文件夹以外的位置吗?