web-dev-qa-db-fra.com

Comment résoudre le problème de référence non définie de __gcov_init lorsqu'il est lié

Je travaille maintenant sur l'étude de couverture du code C et j'ai rencontré le problème suivant, GCC version 4.4.6:

  1. Ajout du drapeau du compilateur 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'

  1. Ajout de l'option 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?

36
lilingmzai

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!

46
Rajen

Êtes-vous en liaison avec -lgcov? Si vous utilisez un Makefile, il serait très utile de le consulter afin de vous aider.

9
niglesias

vous devez fournir LDFLAGS pour résoudre ce problème.

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

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

1
John Gatrell

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.

0
Tod