Tengo un proyecto C++ que utiliza las herramientas automáticas GNU para sus scripts de compilación y libtool para vincular. Recientemente he añadido el código de cubierta con la instrumentación gcov, asegurando que"DSO hace referencia al símbolo oculto 'atexit' cuando se utiliza libtool con gcov
GCOV_CFLAGS="-fprofile-arcs -ftest-coverage"
GCOV_LDFLAGS="-fprofile-arcs -ftest-coverage"
..get incluido en mi CFLAGS
y LDFLAGS
respectivamente. En OS X 10.7.4 usando g ++ - 4.2 (instalado por homebrew), todo funciona bien.
En Ubuntu 12.04 usando g ++ 4.6.3, libtool no se puede vincular una de mis pruebas:
/bin/bash ./libtool --tag=CXX --mode=link g++ -Wall -Wextra -Werror -ansi -fprofile-arcs -ftest-coverage -g -O0 -fprofile-arcs -ftest-coverage -L/usr/local/lib -Wl,-rpath -Wl,/usr/local/lib -o myproj/inttests/locale_test myproj/inttests/locale_test.o myproj/app/libapp.la -lboost_thread-mt -lboost_system-mt -pthread -llog4cplus
libtool: link: g++ -Wall -Wextra -Werror -ansi -fprofile-arcs -ftest-coverage -g -O0 -fprofile-arcs -ftest-coverage -Wl,-rpath -Wl,/usr/local/lib -o myproj/inttests/.libs/locale_test myproj/inttests/locale_test.o -pthread -L/usr/local/lib myproj/app/.libs/libapp.so -lboost_thread-mt -lboost_system-mt /usr/lib/liblog4cplus.so -pthread
/usr/bin/ld: myproj/inttests/.libs/locale_test: hidden symbol `atexit' in /usr/lib/x86_64-linux-gnu/libc_nonshared.a(atexit.oS) is referenced by DSO
/usr/bin/ld: final link failed: Bad value
collect2: ld returned 1 exit status
make[2]: *** [myproj/inttests/locale_test] Error 1
¿Cómo arreglo mi construcción en ubuntu/g ++ 4.6?
¿Trabaja manualmente estas variables GCOV * en otras variables o se incluyen automáticamente? Si los colocas de forma manual en otros, ¿en qué los colocas? – dbeer
En realidad, parece que la versión actual de mis scripts hace una tercera cosa. Eche un vistazo a https://github.com/phs/sauce/blob/master/Makefile.am (vea 'configure.ac' para' GCOV_ENABLED') – phs
Este comentario lo trajo el Departamento del Departamento de Redundancia. '--coverage' es el equivalente de' -fprofile-arcs -ftest-coverage' al compilar y '-lgcov' durante el enlace. – Bulletmagnet