2010-09-14 7 views
19

¿Es posible producir archivos de datos de gcov (archivos .gcda) ejecutando un archivo ejecutable vinculado a una biblioteca compartida creada con la opción --coverage?gcov: produciendo salida .gcda de una biblioteca compartida?

Básicamente, tengo la biblioteca principal que consiste en múltiples archivos de C++ compilados en una biblioteca compartida y luego un subdirectorio llamado "prueba" que contiene un programa de prueba que vincula y prueba la biblioteca principal. Todo compila bien y los archivos .gcno se producen para los archivos fuente de la biblioteca y los archivos fuente de prueba. Sin embargo, los archivos .gcda solo se producen para los archivos fuente de prueba, pero realmente los necesito para los archivos fuente reales que se compilan en la biblioteca compartida.

¿Alguna idea?

Otros detalles:
- Es todo código C++
- Todo lo que se está construyendo con los scripts generados por make automake
- La opción --coverage se especifica para lib_la_CPPFLAGS y lib_la_LDFLAGS en la biblioteca compartida Makefile.am
- La opción --coverage se especifica para AM_CPPFLAGS y AM_LDFLAGS en ejecutable prueba Makefile.am
- Los archivos de origen de prueba hacen uso de Google ensayo (a Marco C++ pruebas unitarias)

Editar: fijo problema de separación

Respuesta

20

Finalmente resolví este problema obteniendo ayuda de los chicos de gcc. Vea el hilo aquí: http://gcc.gnu.org/ml/gcc-help/2010-09/msg00130.html.

Resulta que los archivos .gcda se estaban colocando en el directorio .libs ya que ahí estaban los archivos de la biblioteca compartida (.so). Para que gcov produzca el resultado, tuve que mover los archivos .gcda un nivel hacia donde estaban los archivos fuente.

Además, aquí hay un hilo similar en el que alguien más se encontraba con algunos de los mismos problemas: can gcov deal with shared object?.

+5

También, disculpe por responder a mi propia pregunta y aceptarla, pero permaneció aquí durante días sin ayuda de nadie. – deuberger

+6

También estoy empezando a trabajar con gcov y bibliotecas compartidas, y será útil encontrar su respuesta y el hilo de referencia de gcc-help. Es una buena razón para responder a tu propia pregunta. – Tom

+2

@Tom: Gracias, me alegro de que esto sea útil. También debo señalar que gcov tiene una opción -o (-object-direct) que también se puede usar para especificar la ubicación de los archivos .gcda. – deuberger

Cuestiones relacionadas