我使用带有标志-prof-gen:srcpos的intel编译器icc / icpc在Redhat 6下编译代码,以便执行代码覆盖率分析。这适用于我的代码的某些部分,但我在一些库中有问题。
我收到错误
undefined reference to std::string::_S_compare(unsigned long, unsigned long)
我再次链接/ usr / lib64 / libstdc ++。so.6.0.13。
不幸的是,我无法识别可以编译的代码与不能编码的代码之间的区别。一个不编译的lib是静态构建和链接的。
最好的问候,格奥尔格
答案 0 :(得分:0)
我使用的是intel编译器版本15.0.3 20150407和4.4.7 20120313(Red Hat 4.4.7-17)。
更新到gcc 4.8.2 20140120后,它运行正常。在旧的gcc版本中,未提供所需的功能。
答案 1 :(得分:0)
我一直在努力解决同样的错误。下面是一个修复程序,可以在RHEL5和RHEL6上编译相同的代码,而不会在生成英特尔报告报告时获得您列出的错误。只需将此代码段放在编译器抱怨缺少符号的.cpp
文件中。
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
// NOTE: The block below is ONLY needed for building with the
// Intel code-coverage flags turned on. For some reason,
// this comes up as an un-resolved symbol. So, for CODE
// COVERAGE BUILDS ONLY, this symbol is defined here.
#if defined __INTEL_CODE_COVERAGE__ && defined __GLIBC__
// Specify that 2.6 is required because we know that 2.5 does NOT need this.
// The macro tests for >=. Will need to tune this if other glibc versions are in use.
// We have RHEL5 using 2.5, RHEL6 using 2.12.
#if __GLIBC_PREREQ(2,6)
namespace std {
template int string::_S_compare(size_type, size_type);
}
#endif /* glibc version >= 2.6 */
#endif /* intel code coverage and using glibc */
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////