【问题标题】:Clang Code Coverage - Mac OS X - Linker ErrorClang 代码覆盖率 - Mac OS X - 链接器错误
【发布时间】:2013-10-17 22:17:12
【问题描述】:

我可以使用 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 文件与目标文件一起生成。

在链接方面 - 不支持与 GCC 一起使用的“-lgcov”链接器标志。

“profile_rt”库现在支持 Clang / LLVM 上的代码覆盖率。 不幸的是,找到这个库有点棘手,因为无论出于何种原因,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 文件夹 - 但我仍然遇到同样的问题。

这是在 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 和开发者工具。

【问题讨论】:

    标签: macos linker clang code-coverage


    【解决方案1】:

    我解决了这个问题。

    我缺少以下链接器标志

    -Wall -fprofile-arcs -ftest-coverage

    【讨论】:

    • 你用什么分析结果?
    • 我在使用 Slather 进行代码覆盖和 Xcode 注入时发生了这个问题,这个答案中的解决方法在这种情况下也有效。
    • 那些是编译器标志而不是链接器标志。他们似乎不太可能修复链接错误,而且他们不会为我修复它......
    【解决方案2】:

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

    Build Settings > Other Linker Flags > -fprofile-arcs
    

    【讨论】:

      【解决方案3】:

      上面的答案不适用于我在 Xcode 6.3.1 的 OSX Yosemite (10.10.3) 上。似乎 Apple 移动了这些库。我能够让它与以下编译选项一起工作:

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

      【讨论】:

      • 这个解决方案对我有用。只有这些是链接器选项,而不是编译器选项。
      猜你喜欢
      • 2012-12-12
      • 2013-05-15
      • 2013-11-21
      • 1970-01-01
      • 2014-01-05
      • 2010-11-15
      • 2013-05-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多