私は同じエラーで苦労しました。以下は、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 */
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
'-prof-gen:srcpos'を使用しないと機能しますか?おそらく、リンクしているライブラリと一致しないヘッダでコンパイルしているのでしょうか?あなたはコンパイラの警告を無視していますか? –
はい、-prof-genオプションを付けてコンパイルしないと動作します。シンボル_S_compareはオブジェクトファイルで参照されませんが、コードカバレッジを有効にすると参照されます。 – schorsch312