Ich habe ein C++ Projekt, das die GNU Autotools für seine Build-Skripte und libtool zum Linken verwendet. Vor kurzem habe ich Code-Coverage-Instrumentierung mit gcov hinzugefügt, indem sichergestellt wird, dass"Verstecktes Symbol` atexit 'wird von DSO referenziert "wenn libtool mit gcov verwendet wird
GCOV_CFLAGS="-fprofile-arcs -ftest-coverage"
GCOV_LDFLAGS="-fprofile-arcs -ftest-coverage"
..get jeweils in meinem CFLAGS
und LDFLAGS
enthalten. Unter OS X 10.7.4 mit g ++ - 4.2 (installiert von Homebrew) funktioniert alles einwandfrei.
auf Ubuntu 12.04 mit g ++ 4.6.3 schlägt fehl, libtool einer meiner Tests zu verknüpfen:
/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
Wie behebe ich meine Build auf ubuntu/g ++ 4.6?
Sie arbeiten diese GCOV * vars manuell in andere Variablen oder sind sie automatisch enthalten? Wenn Sie sie manuell in andere platzieren, in welche platzieren Sie sie? – dbeer
Eigentlich sieht es so aus, als ob die aktuelle Version meiner Skripts noch eine dritte Sache macht. Werfen Sie einen Blick auf https://github.com/phs/sauce/blob/master/Makefile.bin (siehe 'configure.ac' für' GCOV_ENABLED') – phs
Dieser Kommentar stammt von der Abteilung für Redundanz. '--coverage' ist das Äquivalent zu' -fprofile-arcs -ftest-coverage' beim Kompilieren und '-lgcov' beim Linken. – Bulletmagnet