我现在正在进行C代码覆盖率研究并遇到以下问题,GCC版本4.4.6:
CFLAGS = --coverage
和链接器选项LDFLAGS := --coverage
或LOCAL_LDLIBS := --coverage
并得到错误:undefined reference to '__gcov_init'" and "undefined reference to '__gcov_merge_add'
LOCAL_LDFLAGS := --coverage
,并收到链接错误: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'
有人可以帮忙就这个问题提供一些建议吗?
试试这种方法:
使用以下选项编译要为其生成coverage的代码:
CFLAGS: -fprofile-arcs -ftest-coverage
LFLAGS: -lgcov --coverage
如果这不能解决问题,那么请提供一些关于应用程序结构的信息,即它的单个程序或涉及共享/静态库等的应用程序。
希望有所帮助!
你在链接-lgcov吗?如果您正在使用Makefile,那么为了帮助您,查看它将会非常有帮助。
我发现我必须将'-lgcov'放在被分析对象的右边而不是Flags中。就像是。 gcc -pg -o myprog myprog.o -lgmp.a -lgcov
您必须提供LDFLAGS才能解决此问题。
LDFLAGS += " -lgcov --coverage"
我无法确定哪个改变最终对我有所帮助,但我认为这是-fprofile-generate
旗帜。使用GNAT GPS我去了左边的Switches
标签,然后选择了顶部的Ada Linker
标签。然后我启用了Code Coverage
的复选框。哦,是的,我发现在同一区域的Builder
标签上,如果你启用Recompile if switches changed
复选框,它可以节省很多牙齿gnashing。可能会减慢专业人员的速度,但我发现它很有帮助。