我可以使用GCOV的GCC功能和LCOV工具在Linux上成功获取C ++代码库的代码覆盖率信息。
但我在Mac OS X中遇到了麻烦。
由于Apple不再使用经典的GCC编译器,我们担心LLVM-GCC编译器有一天会消失(LLVM-GCC甚至不能在Xcode 5.0中作为选项使用) - 我们决定使用Clang编译我们的代码。
在使用Clang编译器时,我传递了这些标志 - > -g -fprofile-arcs -ftest-coverage以生成代码覆盖率信息。
我可以看到.gcno文件与目标文件一起生成。
当谈到链接时 - " -lgcov“不支持与GCC一起使用的链接器标志。
“profile_rt”库现在支持Clang / LLVM上的代码覆盖率。 不幸的是,找到这个库有点棘手,因为Apple出于某种原因决定不将它包含在默认的库路径中。相反,您必须手动导航到/ usr / lib /以链接它:
正如指定am链接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文件夹 - 但我仍然遇到同样的问题。
这是在Mountain Lion上运行的Clang版本。
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和开发者工具。
答案 0 :(得分:14)
我解决了这个问题。
我错过了以下Linker Flags
-Wall -fprofile-arcs -ftest-coverage
答案 1 :(得分:3)
上述答案对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
答案 2 :(得分:3)
其他链接标记-fprofile-arcs
为我解决了这个问题。
Build Settings > Other Linker Flags > -fprofile-arcs