2013-10-10 2 views
8

Je pourrais obtenir des informations de couverture de code sur notre base de code C++ sous Linux en utilisant les fonctions GCC de GCOV et l'outil LCOV.Couverture de code CLang - Mac OS X - Erreur de lieur

Mais j'ai des problèmes avec Mac OSX. Comme Apple n'a plus le compilateur GCC classique, et nous craignons que le compilateur LLVM-GCC disparaisse un jour (LLVM-GCC n'est même pas disponible en option dans XCode 5.0) - nous avons décidé d'utiliser CLang pour compiler notre code.

Lors de l'utilisation du compilateur CLam iam en passant ces indicateurs -> -g -fprofile-arcs -ftest-coverage pour générer les informations de couverture de code.

Je peux voir les fichiers .gcno générés avec les fichiers objets.

Quand il vient à relier - « -lgcov » drapeau de liaison qui travaille avec GCC est pas pris en charge

La couverture de code sur Clang/LLVM est maintenant pris en charge par la librairie « profile_rt » Malheureusement, il est un peu.. difficile à trouver cette bibliothèque parce que Apple pour une raison quelconque a décidé de ne pas l'inclure dans le chemin de la bibliothèque par défaut.Au lieu, vous devrez naviguer manuellement dans/usr/lib/pour lier:

bibliothèque libprofile_rt.a

Mais j'ai des problèmes de liaison.

Mais je continue à recevoir ces erreurs de l'éditeur de liens

Undefined symbols for architecture x86_64: 
    "_llvm_gcov_init", referenced from: 
     ___llvm_gcov_init in Iso9660Reader.o 
     ___llvm_gcov_init in AutoExtractCreator.o 
     ___llvm_gcov_init in TempFilePath.o 
     ___llvm_gcov_init in TempPath.o 
     ___llvm_gcov_init in ReadDirectory.o 
     ___llvm_gcov_init in OpenDirectory.o 
     ___llvm_gcov_init in SpltPath.o 
     ... 
ld: symbol(s) not found for architecture x86_64 

J'ai aussi essayé liaison avec la bibliothèque dynamique - libprofile_rt.dylib trouvée dans le dossier /usr/lib - Mais je reçois toujours la même question.

Cette version CLang s'exécute sur Mountain Lion.

clang --version 
Apple LLVM version 5.0 (clang-500.2.75) (based on LLVM 3.3svn) 
Target: x86_64-apple-darwin12.5.0 
Thread model: posix 

J'ai aussi XCode 5.0 et outils de développement installé

Toutes les réponses seront appréciées.

Merci!

Répondre

11

J'ai résolu ce problème.

je manquais les drapeaux linkers suivants

-Wall -fprofile-arcs -ftest-couverture

+0

Avec quoi analysez-vous les résultats? –

+2

Ce problème m'est arrivé lors de l'utilisation de Slather pour la couverture de code et Injection pour Xcode, la solution de contournement dans cette réponse a également fonctionné dans ce cas. –

+1

Ce sont des indicateurs de compilation et non des indicateurs de liens. Il semble peu probable qu'ils corrigent une erreur de lien, et ils ne la fixent pas pour moi ... – poolie

3

La réponse ci-dessus n'a pas fonctionné pour moi sur OSX Yosemite (10.10.3) avec Xcode 6.3.1 . Il semble qu'Apple ait déplacé ces bibliothèques. J'ai pu obtenir de travailler avec les options de compilation suivantes:

-lclang_rt.profile_osx 
-L/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/6.1.0/lib/darwin 
+0

Cette solution a fonctionné pour moi. Seulement ce sont des options de linker, pas des options de compilateur. – 100grams

+0

El Captain semble fonctionner à nouveau correctement –

1

Autres Linker Drapeau -fprofile-arcs résout le problème pour moi.

Build Settings > Other Linker Flags > -fprofile-arcs