32

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

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

有任何想法吗?

附加信息:

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

1 回答 1

33

I finally solved this problem by getting some help from the gcc guys. See the thread here: http://gcc.gnu.org/ml/gcc-help/2010-09/msg00130.html.

It turns out that the .gcda files were being put in the .libs directory since that's where the shared library (.so) files were. In order to get gcov to produce the output, I had to move the .gcda files up one level to where the source files were.

Also, here's a similar thread where someone else was running into some of the same problems: can gcov deal with shared object?.

于 2010-09-20T20:01:48.210 回答