2016-06-29 13 views
0

インテルコンパイラicc/icpcを-prof-gen:srcposフラグを付けてRedhat 6でコンパイルします。コードカバレッジ分析を実行する。これは私のコードのいくつかの部分でうまく動作しますが、いくつかのライブラリに問題があります。インテルコードカバレッジ - >未定義の `std :: string :: _ S_compare(unsigned long、unsigned long)への参照

私は/usr/lib64/libstdc++.so.6.0.13 againtリンク

undefined reference to std::string::_S_compare(unsigned long, unsigned long) 

エラーが発生します。

残念ながら、私はコンパイルできるコードとそれができないコードの違いを特定できません。コンパイルされない1つのlibは、静的に構築され、リンクされます。

敬具、ゲオルク

+0

'-prof-gen:srcpos'を使用しないと機能しますか?おそらく、リンクしているライブラリと一致しないヘッダでコンパイルしているのでしょうか?あなたはコンパイラの警告を無視していますか? –

+0

はい、-prof-genオプションを付けてコンパイルしないと動作します。シンボル_S_compareはオブジェクトファイルで参照されませんが、コードカバレッジを有効にすると参照されます。 – schorsch312

答えて

0

私は、Intelコンパイラのバージョン15.0.3 20150407および4.4.7 20120313(Red Hatの4.4.7-17)を使用しています。

gcc 4.8.2 20140120にアップデートしたところ正常に動作しています。古いgccバージョンでは、必要な機能は提供されていません。

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 */ 

//////////////////////////////////////////////////////////////////////////////// 
//////////////////////////////////////////////////////////////////////////////// 
関連する問題