How to resolve __gcov_init undefined reference issue when linking

I now work on C code coverage study and encountered following issue, GCC version 4.4.6:

  1. Added compiler flag CFLAGS = --coverage and linker option LDFLAGS := --coverage or LOCAL_LDLIBS := --coverage and got the error:

undefined reference to '__gcov_init'" and "undefined reference to '__gcov_merge_add'

  1. Added option LOCAL_LDFLAGS := --coverage, and got link error:

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'

Can anyone help to provide some suggestions on this issue?


Solution 1:

Try this approach:

Compile the code for which you want to generate the coverage with these options:

CFLAGS: -fprofile-arcs -ftest-coverage

LFLAGS: -lgcov --coverage

If this doesn't solve the problem, then please provide some information on the structure of your application, i.e. whether its single program or an application involving shared/static libraries etc.

Hope that helps!

Solution 2:

Are you linking with -lgcov?

If you are using a Makefile it would be of great help to have a look at it in order to help you.