2013-05-22 3 views
25

ich Studie C Code-Coverage jetzt arbeite und folgendes Problem aufgetreten, GCC Version 4.4.6:Wie undefinierte Referenz Problem resovle __gcov_init wenn Link

  1. Added Compiler-Flag CFLAGS = --coverage und Linker-Option LDFLAGS := --coverage oder LOCAL_LDLIBS := --coverage und bekam die Fehler:

undefined reference to '__gcov_init'" and "undefined reference to '__gcov_merge_add'

  1. Option hinzugefügt LOCAL_LDFLAGS := --coverage und bekam l Tintenfehler:

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'

Kann mir jemand helfen einige Vorschläge zu diesem Thema zur Verfügung zu stellen?

Antwort

8

Verknüpfen Sie mit -lgcov? Wenn Sie ein Makefile verwenden, wäre es eine große Hilfe, es sich anzusehen, um Ihnen zu helfen.

+0

Ja, ich habe auch versucht -lgcov Link-Option, aber immer noch oben Problem 1). Vielen Dank für Ihre Antwort – lilingmzai

29

Versuchen Sie diesen Ansatz:

Kompilieren Sie den Code für die Sie die Abdeckung mit diesen Optionen generieren möchten:

CFLAGS: -fprofile-arcs -ftest-coverage

LFLAGS: -lgcov --coverage

Wenn dies das Problem nicht lösen, Dann geben Sie bitte einige Informationen zur Struktur Ihrer Anwendung an, dh ob es sich um ein einzelnes Programm oder um eine Anwendung mit gemeinsamen/statischen Bibliotheken usw. handelt.

Hoffe, dass hilft!

+0

Für mich Hinzufügen von --cover zu LFLAGS löste das Problem. Früher habe ich nur -lgcov für LFLAGS verwendet. –

+0

Ich glaube, das Hinzufügen von '--coverage' zu' LFLAGS' ist nur für den LLVM-Compiler auf Mac notwendig. – Zak

0

Ich kann nicht sicher sein, welche Änderung schließlich den Trick für mich getan hat, aber ich denke, es war die -fprofile-generate Flagge. Mit GNAT GPS ging ich zur Registerkarte Switches auf der linken Seite und wählte dann die Registerkarte Ada Linker auf der Oberseite. Dann habe ich das Kontrollkästchen für Code Coverage aktiviert. Oh ja, ich habe festgestellt, dass auf der Registerkarte Builder in diesem Bereich, wenn Sie das Kontrollkästchen Recompile if switches changed aktivieren, kann es eine Menge Zähne-gnash speichern. Wahrscheinlich verlangsamt es die Dinge für die Profis, aber ich fand es hilfreich.