2013-10-10 57 views
8

使用GCOV和LCOV工具的GCC功能,我可以在Linux上成功获取我们C++代码库上的代码覆盖率信息。CLang代码覆盖率 - Mac OS X - 链接器错误

但是我在Mac OSX上遇到了麻烦。由于苹果公司现在还没有经典的GCC编译器,而且我们担心LLVM-GCC编译器有一天也会消失(LLVM-GCC甚至没有作为XCode 5.0中的一个选项提供) - 我们决定使用CLang来编译我们的代码。

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

我可以看到与对象文件一起生成的.gcno文件。

当谈到链接 - “-lgcov”与不支持GCC作品链接器标志

上锵/ LLVM代码覆盖率现在由‘profile_rt’库支持 不幸的是这是一个有点。很难找到这个库,因为苹果无论出于何种原因决定不将它包含在默认库路径中,而是需要手动导航到/ 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 

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

这是在山狮上运行的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 

我也有5.0的XCode以及开发者工具安装

任何答复将不胜感激。

谢谢!

回答

11

我解决了这个问题。

我错过下面的链接器标记

-Wall -fprofile弧-ftest覆盖

+0

你用什么分析结果? –

+2

在使用Slather进行代码覆盖和注入Xcode时,发生了这个问题,在这种情况下,此答案中的解决方法也起作用。 –

+1

这些是编译器标志而不是链接器标志。他们似乎不太可能修复链接错误,并且他们不会为我修复它... – poolie

3

以上回答没有为我工作在OSX约塞米蒂(10.10.3)和Xcode 6.3.1 。看来苹果公司把这些图书馆搬到了周围。我能得到它与下面的编译选项工作:

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

此解决方案适用于我。只有这些是链接器选项,而不是编译器选项。 – 100grams

+0

El Captain似乎再次行得通 –

1

其他链接器标志-fprofile-arcs修复这个问题对我来说。

Build Settings > Other Linker Flags > -fprofile-arcs