linker - Cómo resolver__gcov_init problema de referencia indefinido cuando enlace
undefined-reference (3)
¿Estás vinculando con -lgcov? Si está utilizando un Makefile, sería de gran ayuda echarle un vistazo para ayudarle.
Ahora trabajo en el estudio de cobertura de código C y encontré el siguiente problema, GCC versión 4.4.6:
- Se agregó el indicador del compilador
CFLAGS = --coverage
y opción de vinculadorLDFLAGS := --coverage
oLOCAL_LDLIBS := --coverage
y recibió el error:
undefined reference to ''__gcov_init''" and "undefined reference to ''__gcov_merge_add''
- Se agregó la opción
LOCAL_LDFLAGS := --coverage
, y se obtuvo un error de enlace:
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''
¿Alguien puede ayudar a proporcionar algunas sugerencias sobre este tema?
No puedo estar seguro de qué cambio finalmente hizo el truco para mí, pero creo que fue el -fprofile-generate
. Usando GNAT GPS, fui a la pestaña Switches
a la izquierda y luego seleccioné la pestaña Ada Linker
en la parte superior. Luego habilité la casilla de verificación para la Code Coverage
. Ah, sí, he encontrado que en la pestaña Builder
en esa misma área, si habilitas la casilla Recompile if switches changed
se puede ahorrar un montón de crujir de dientes. Probablemente ralentiza las cosas para los profesionales, pero me pareció útil.
Pruebe este enfoque:
Compile el código para el que desea generar la cobertura con estas opciones:
CFLAGS: -fprofile-arcs -ftest-coverage
LFLAGS: -lgcov --coverage
Si esto no resuelve el problema, proporcione información sobre la estructura de su aplicación, es decir, si se trata de un programa único o una aplicación que incluya bibliotecas compartidas / estáticas, etc.
¡Espero que ayude!