如何在链接时解决__gcov_init未定义的引用问题

时间:2013-05-22 02:38:41

标签: linker undefined-reference gcov

我现在正在进行C代码覆盖率研究并遇到以下问题,GCC版本4.4.6:

  1. 添加了编译器标记CFLAGS = --coverage和链接器选项LDFLAGS := --coverageLOCAL_LDLIBS := --coverage并收到错误:
  2. undefined reference to '__gcov_init'" and "undefined reference to '__gcov_merge_add'

    1. 添加了选项LOCAL_LDFLAGS := --coverage,并收到链接错误:
    2. libgcov.a(_gcov.o): in function __gcov_set_sampling_rate: undefined reference to '__gcov_sampling_rate' libgcov.a(_gcov.o): in function gcov_exit: undefined reference to '__gcov_pmu_profile_filename' libgcov.a(_gcov.o): in function __gcov_init: undefined reference to '__gcov_pmu_profile_options' '__gcov_pmu_top_n_address'

      有人可以帮忙就此问题提供一些建议吗?

5 个答案:

答案 0 :(得分:45)

尝试这种方法:

使用以下选项编译要为其生成coverage的代码:

CFLAGS: -fprofile-arcs -ftest-coverage

LFLAGS: -lgcov --coverage

如果这不能解决问题,那么请提供一些关于应用程序结构的信息,即它的单个程序或涉及共享/静态库的应用程序等。

希望有所帮助!

答案 1 :(得分:9)

你是否与-lgcov联系? 如果您使用的是Makefile,那么为了帮助您,请查看它是非常有帮助的。

答案 2 :(得分:1)

我发现必须将'-lgcov'放在要分析的对象的右侧,而不是在Flags中。就像是。 gcc -pg -o myprog myprog.o -lgmp.a -lgcov

答案 3 :(得分:0)

我无法确定哪个更改最终对我有用,但我认为这是-fprofile-generate标志。使用GNAT GPS,我转到左侧的Switches标签,然后选择顶部的Ada Linker标签。然后我启用了Code Coverage的复选框。哦,是的,我发现在同一区域的Builder标签上,如果你启用了Recompile if switches changed复选框,它可以节省很多牙齿。可能会减慢专业人员的速度,但我发现它很有帮助。

答案 4 :(得分:0)

您必须提供LDFLAGS才能解决此问题。

LDFLAGS += " -lgcov --coverage"