Подтвердить что ты не робот

Как устранить проблему __gcov_init undefined, когда ссылка

Теперь я работаю над исследованием покрытия кода C и столкнулся с следующей проблемой, GCC версии 4.4.6:

  • Добавлен флаг компилятора CFLAGS = --coverage и вариант компоновщика LDFLAGS := --coverage или LOCAL_LDLIBS := --coverage и получил ошибку:

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

  1. Добавлена ​​опция 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'

Может кто-нибудь помочь в некоторых предложениях по этой проблеме?

4b9b3361

Ответ 1

Попробуйте этот подход:

Скомпилируйте код, для которого вы хотите создать покрытие с помощью следующих опций:

CFLAGS: -fprofile-arcs -ftest-coverage

LFLAGS: -lgcov --coverage

Если это не решит проблему, пожалуйста, предоставьте некоторую информацию о структуре вашего приложения, то есть ли ее отдельная программа или приложение с участием общих/статических библиотек и т.д.

Надеюсь, что это поможет!

Ответ 2

Вы связываетесь с -lgcov? Если вы используете Makefile, было бы очень полезно взглянуть на него, чтобы помочь вам.

Ответ 3

Я не могу быть уверен, какое изменение, наконец, сделало трюк для меня, но я думаю, что это был флаг -fprofile-generate. Используя GNAT GPS, я перешел на вкладку Switches слева, а затем выбрал вкладку Ada Linker вверху. Затем я включил флажок для Code Coverage. О, да, я обнаружил, что на вкладке Builder в этой же области, если вы включите флажок Recompile if switches changed, он может сэкономить много скрежет зубов. Наверное, замедляет работу профессионалов, но я счел это полезным.