Je travaille maintenant sur l'étude de couverture du code C et j'ai rencontré le problème suivant, GCC version 4.4.6:
CFLAGS = --coverage
Et de l'option de l'éditeur de liens LDFLAGS := --coverage
Ou LOCAL_LDLIBS := --coverage
Et erreur:undefined reference to '__gcov_init'" and "undefined reference to '__gcov_merge_add'
LOCAL_LDFLAGS := --coverage
Et erreur de lien: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'
Quelqu'un peut-il aider à fournir des suggestions à ce sujet?
Essayez cette approche:
Compilez le code pour lequel vous souhaitez générer la couverture avec ces options:
CFLAGS: -fprofile-arcs -ftest-coverage
LFLAGS: -lgcov --coverage
Si cela ne résout pas le problème, veuillez fournir des informations sur la structure de votre application, c'est-à-dire s'il s'agit de son programme unique ou d'une application impliquant des bibliothèques partagées/statiques, etc.
J'espère que cela pourra aider!
Êtes-vous en liaison avec -lgcov? Si vous utilisez un Makefile, il serait très utile de le consulter afin de vous aider.
vous devez fournir LDFLAGS pour résoudre ce problème.
LDFLAGS += " -lgcov --coverage"
J'ai trouvé que je devais mettre le '-lgcov' à droite de l'objet en cours de profilage plutôt que dans Flags. Quelque chose comme. gcc -pg -o myprog myprog.o -lgmp.a -lgcov
Je ne sais pas quel changement a finalement fait l'affaire, mais je pense que c'était le -fprofile-generate
drapeau. En utilisant GNAT GPS, je suis allé dans l'onglet Switches
à gauche, puis j'ai sélectionné le Ada Linker
onglet en haut. Ensuite, j'ai activé la case à cocher pour Code Coverage
. Oh oui, je l'ai trouvé sur l'onglet Builder
dans cette même zone si vous activez le Recompile if switches changed
case à cocher il peut économiser beaucoup de grincements de dents. Ralentit probablement les choses pour les pros mais je l'ai trouvé utile.