2012-04-04 4 views
4

Ich habe versucht, gcov mit -fprofile-arcs & -ftest-coverage und nichts für die Verknüpfung zu starten.gcov erzeugt keine gcda-dateien

Es gab diesen Fehler: -

hidden symbol `__gcov_init' in /home/mojave/tools/gcc-4.4.1/amd64/bin/../lib/gcc/x86_64-unknown-linux-gnu/4.4.1/libgcov.a(_gcov.o) is referenced by DSO 

und Programm beendet.

Befehl

bsub -g /mojave/build/"DummyDate" -J compile-obj/linux24rhel3_x86_64_GCOV64/DXp.o -I -q DFM -S 8192 -R "(model==OPTERON_250)" '/usr/bin/time --format="   ...finished DXp [`hostname`] [%E s with %P CPU]" /home/mojave/tools/gcc-4.4.1/amd64/bin/g++ -fPIC -Wall -Wno-deprecated -DTCL_8_5 -m64 -march=opteron -DLITTLE_ENDIAN_PLATFORM -DARCH=amd64 -DARCH_amd64 -DARCH_BITS=64 -DARCH_BITS_64 -fsigned-char -msse3 -D__DISABLE_MULTITHREAD__ -D_CPP_NUMERIC_LIMITS -mfpmath=sse,387 -mmmx -m3dnow -pipe -Dgcc -DLICENSE_ALWAYS_GOOD -I/home/mojave/tools/flexlm/include/v8.4 -DNO_SUPPORT_STABIE -DGCOV -I../dxpclient -I/home/mojave/tools/bzip2-1.0.2/amd64/include -I/home/mojave/tools/zlib-1.2.3/amd64/include -I/home/mojave/tools/tcltk8.5.2/amd64//include -I/home/mojave/tools/tcltk8.5.2/amd64//include -g -fprofile-arcs -ftest-coverage -DBUILD_DATE=\""UNSET"\" -DVERSION_NUMBER=\"Dum.Dum.Dum.Dummy\" -DEXT_VERSION_NUMBER=\"Dum.Dum.Dum.Dummy\" -DLAST_RELEASE_VERSION=\"1.1614\" -Wreturn-type -DTCL_8_5 -DGOOGLE_MALLOC -L../dx/linux24rhel3_x86_64_GCOV64/ -ldx -o obj/linux24rhel3_x86_64_GCOV64/DXp obj/linux24rhel3_x86_64_GCOV64/DXp.o -Wl -lgcov /home/mojave/tools/zlib-1.2.3/amd64/lib/libz.a -L/home/mojave/tools/bzip2-1.0.2/amd64/lib -lbz2 -ldl' 

Jede mögliche Hilfe bei Abstimmung bis compile- geschätzt wird.

Danke.

+0

Können Sie uns das Makefile oder den Kompilierungsstring zeigen? Es ist durchaus möglich, dass Sie die Profilflags an ein falsches Zielobjekt anhängen. – Shrey

Antwort

7

Kompilieren Sie mit -fprofile-arcs und -ftest-coverage. Verknüpfen Sie mit -lgcov während der Generierung des gemeinsamen Objekts. Es wird klappen.

Auch Sie können --coverage Option als Synonym für alle drei Schritte

Blick auf verwenden: gcc instrumentation options für weitere Informationen

+5

Hinweis: Die Verwendung von "--coverage" für Kompilierung und Verknüpfung wird automatisch in die von Ihnen angegebenen Flags umgesetzt. Dies ist eine Annehmlichkeit, die von gcc angeboten wird, um die Dinge zu vereinfachen. Auch zukunftssicher. Genießen ! – Offirmo

+0

Ich versuche diese Befehle aber immer noch keine gcda-Datei aus: 'g ++ -fprofil-arcs -ftest-coverage -lgcov main.cpp' Vermisse ich noch etwas anderes? – naive231

+0

@ naive231 Ich persönlich hatte dieses Problem, weil ich eine for (;;) Endlosschleife am Ende meiner Hauptmethode hatte. Das Programm muss beendet werden, damit die gcda-Dateien korrekt generiert werden. – user3062913

0

Nach Prüfung der Kompilation Flagge, wie oben erwähnt durch crazy_prog, Prüfung der „Weg“. Bei der Abdeckung mit lcov/gcov spielt der Pfad eine wichtige Rolle.

Daher müssen der Pfad, in dem Sie die Binärdatei (vollständige Pfadzeichenfolge) erstellt haben, und der Pfad, in dem Sie die Binärdatei ausführen, exakt identisch sein.

Für meinen Zweck, da die Erstellung der binären und Ausführung der Binärdatei an verschiedenen Orten ist (eins in der Entwicklungsumgebung und andere in tatsächlichen Board), so benutze ich die Softlink/Verknüpfungen, ich ähnliche Pfad und damit laufen die ausführbare Datei. Schließlich kann man den Bericht in der Entwicklungsumgebung generieren (normalerweise, da die tatsächliche Plattform an Bord möglicherweise keine lcov-Tools unterstützt).