Clang Code Coverage - Mac OS X - ошибка компоновщика

Я мог бы успешно получить информацию о покрытии кода в нашей базе C++ кода для Linux, используя функции GCC GCOV и инструмент LCOV.

Но у меня проблемы в Mac OS X.

Поскольку у Apple больше нет классического компилятора GCC, и мы опасаемся, что компилятор LLVM -g CC тоже однажды исчезнет (LLVM -g CC даже не доступен в качестве опции в Xcode 5.0) - мы решили использовать Звоните, чтобы скомпилировать наш код.

При использовании компилятора Clang я передаю эти флаги → -g -fprofile-arcs -ftest-покрытие для генерации информации покрытия кода.

Я вижу, как создаются файлы .gcno вместе с объектными файлами.

Когда дело доходит до связывания - флаг компоновщика "-lgcov", который работает с GCC, не поддерживается.

Покрытие кода в Clang/LLVM теперь поддерживается библиотекой "profile_rt". К сожалению, найти эту библиотеку немного сложно, потому что Apple по какой-то причине решила не включать ее в путь к библиотеке по умолчанию. Вместо этого вам придется вручную перейти к /usr/lib/для ссылки на него:

И, как указано, я ссылаюсь на библиотеку libprofile_rt.a.

Но у меня есть проблемы с компоновщиком.

Но я продолжаю получать эти ошибки компоновщика

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 

Я также пытался связываться с динамической библиотекой - libprofile_rt.dylib, находящейся в папке /usr/lib - Но я все еще получаю ту же проблему.

Это Clang Version, работающая на 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

У меня также установлены Xcode 5.0 и Developer Tools.

Ответ 1

Я решил это.

Мне не хватало следующих флагов линкера

-Wall -fprofile-arcs -ftest-coverage

Ответ 2

Этот ответ не работал у меня на OSX Yosemite (10.10.3) с Xcode 6.3.1. Кажется, Apple переместила эти библиотеки. Мне удалось заставить его работать со следующими параметрами компиляции:

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

Ответ 3

Другой флаг Linker -fprofile-arcs исправляет проблему для меня.

Build Settings > Other Linker Flags > -fprofile-arcs