it-swarm.com.de

So beheben Sie ein nicht definiertes Referenzproblem von __gcov_init, wenn eine Verknüpfung besteht

Ich arbeite jetzt an einer C-Code-Erfassungsstudie und habe folgendes Problem festgestellt, GCC-Version 4.4.6:

  1. Compiler-Flag CFLAGS = --coverage Und Linker-Option LDFLAGS := --coverage Oder LOCAL_LDLIBS := --coverage Hinzugefügt und Fehler gemeldet:

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

  1. Option LOCAL_LDFLAGS := --coverage Hinzugefügt und Linkfehler erhalten:

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 jemand helfen, einige Vorschläge zu diesem Thema zu liefern?

36
lilingmzai

Versuchen Sie diesen Ansatz:

Kompilieren Sie den Code, für den Sie das Coverage generieren möchten, mit diesen Optionen:

CFLAGS: -fprofile-arcs -ftest-coverage

LFLAGS: -lgcov --coverage

Wenn dies das Problem nicht löst, geben Sie bitte einige Informationen zur Struktur Ihrer Anwendung an, d. H. Ob es sich um ein einzelnes Programm oder eine Anwendung mit gemeinsam genutzten/statischen Bibliotheken handelt usw.

Ich hoffe, das hilft!

46
Rajen

Verlinken Sie mit -lgcov? Wenn Sie ein Makefile verwenden, ist es eine große Hilfe, es sich anzusehen, um Ihnen zu helfen.

9
niglesias

sie müssen LDFLAGS bereitstellen, um dieses Problem zu beheben.

LDFLAGS += " -lgcov --coverage"
1
Ajay.kundu

Ich stellte fest, dass ich das '-lgcov' rechts von dem Objekt setzen musste, für das ein Profil erstellt wurde, anstatt in Flags. Etwas wie. gcc -pg -o myprog myprog.o -lgmp.a -lgcov

1
John Gatrell

Ich kann nicht sicher sein, welche Änderung letztendlich den Trick für mich bewirkt hat, aber ich denke, es war die -fprofile-generate - Flagge. Mit GNAT GPS bin ich auf die Registerkarte Switches links gegangen und habe oben die Registerkarte Ada Linker Ausgewählt. Dann habe ich das Kontrollkästchen für Code Coverage Aktiviert. Oh ja, ich habe festgestellt, dass auf der Registerkarte Builder im selben Bereich, wenn Sie das Kontrollkästchen Recompile if switches changed Aktivieren, eine Menge Zähneknirschen gespart werden kann. Wahrscheinlich verlangsamt sich die Sache für die Profis, aber ich fand es hilfreich.

0
Tod