CLang代码覆盖范围 - Mac OS X - 链接器错误

kam*_*yFC 11 macos linker code-coverage clang

我可以使用GCOV的GCC功能和LCOV工具在Linux上成功获取C++代码库的代码覆盖率信息.

但我在Mac OSX遇到麻烦.

由于Apple不再使用经典的GCC编译器,我们担心LLVM-GCC编译器有一天会消失(LLVM-GCC甚至不能作为XCode 5.0中的选项) - 我们决定使用CLang编译我们的码.

使用CLang编译器iam传入这些标志 - > -g -fprofile-arcs -ftest-coverage来生成代码覆盖率信息.

我可以看到.gcno文件与目标文件一起生成.

当涉及链接时 - 不支持与GCC一起使用的"-lgcov"链接器标志.

现在,"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 
Run Code Online (Sandbox Code Playgroud)

我还尝试链接动态库 - 在/ usr/lib文件夹中找到libprofile_rt.dylib - 但我仍然遇到同样的问题.

这是在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
Run Code Online (Sandbox Code Playgroud)

我还安装了XCode 5.0和Developer Tools

任何回复将不胜感激.

谢谢!!

kam*_*yFC 14

我解决了这个问题

我错过了以下Linker Flags

-Wall -fprofile-arcs -ftest-coverage

  • 在使用Slather进行代码覆盖和使用Xcode注入时,我遇到了这个问题,这个问题的解决方法也适用于这种情况. (2认同)
  • 这些是编译器标志,而不是链接器标志。他们似乎不太可能会修复链接错误,而且他们并没有为我修复它。 (2认同)

pka*_*amb 6

其他链接器标志-fprofile-arcs为我解决了这个问题。

Build Settings > Other Linker Flags > -fprofile-arcs
Run Code Online (Sandbox Code Playgroud)