2013-10-10 11 views
8

Potrei ottenere con successo le informazioni sulla copertura del codice sulla nostra base di codice C++ su Linux utilizzando le funzionalità GCC di GCOV e lo strumento LCOV.CLang Code Coverage - Mac OS X - Linker Error

Ma ho problemi con Mac OSX.

Poiché Apple non ha più il classico compilatore GCC e temiamo che il compilatore LLVM-GCC un giorno scompaia troppo (LLVM-GCC non è nemmeno disponibile come opzione in XCode 5.0) - abbiamo deciso di utilizzare CLang per compilare il nostro codice.

Durante l'utilizzo del compilatore CLang iam passando questi flag -> -g -fprofile-arcs -ftest-coverage per generare le informazioni sulla copertura del codice.

È possibile visualizzare i file .gcno generati insieme ai file oggetto.

Quando si tratta di collegamento - "-lgcov” bandiera linker che funziona con GCC non è supportata

La copertura del codice a Clang/LLVM è ora supportato dalla libreria ‘profile_rt’ purtroppo è un po '.. . difficile da trovare questa libreria perché Apple per qualsiasi motivo ha deciso di non includerlo nel percorso di libreria di default Invece dovrete navigare manualmente in/usr/lib/a collegare contro di essa:

E come specificato stanno collegando contro libreria libprofile_rt.a

Ma ho problemi di linker.

Ma continuo a ricevere questi errori del linker

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 

Ho anche provato il collegamento alla libreria dinamica - libprofile_rt.dylib trovano in cartella/usr/lib - Ma ho ancora lo stesso problema.

Questa è la versione CLang in esecuzione su 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 

devo anche XCode 5.0 e Developer Tools installato

Eventuali risposte saranno apprezzati.

Grazie !!

risposta

11

Ho risolto questo.

mi mancava seguenti Linker Flags

-Wall -fprofile-archi -ftest-copertura

+0

Con cosa stai analizzando i risultati? –

+2

Questo problema mi è successo durante l'utilizzo di Slather per la copertura del codice e Injection per Xcode, anche in questo caso la soluzione in questa risposta ha funzionato. –

+1

Questi sono flag del compilatore e flag del linker. Sembra improbabile che risolveranno un errore di collegamento e non lo risolveranno per me ... – poolie

3

La risposta di cui sopra non ha funzionato per me su OSX Yosemite (10.10.3) con Xcode 6.3.1 . Sembra che Apple abbia spostato queste librerie. Sono riuscito a farlo funzionare con le seguenti opzioni di compilazione:

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

Questa soluzione ha funzionato per me. Solo queste sono opzioni di linker, non opzioni di compilazione. – 100grams

+0

El Captain sembra funzionare di nuovo bene –

1

Altri Linker Bandiera -fprofile-arcs risolve il problema per me.

Build Settings > Other Linker Flags > -fprofile-arcs