web-dev-qa-db-ja.com

gcov:共有ライブラリから.gcda出力を生成しますか?

.gcdaオプションで構築された共有ライブラリにリンクされた実行可能ファイルを実行することにより、gcovデータファイル(--coverageファイル)を生成することは可能ですか?

基本的に、1つの共有ライブラリにコンパイルされた複数のc ++ファイルで構成されるメインライブラリと、メインライブラリにリンクしてテストするテストプログラムを含む「test」というサブディレクトリがあります。すべてが正常にコンパイルされ、ライブラリソースファイルとテストソースファイルの両方に対して.gcnoファイルが生成されます。 .gcdaファイルはテストソースファイル用にのみ作成されますが、共有ライブラリにコンパイルされる実際のソースファイル用に本当に必要です。

何か案は?

追加情報:

  • それはすべてC++コードです
  • すべてがautomakeによって生成されたmakeスクリプトで構築されています
  • --coverageオプションは、共有ライブラリMakefile.amのlib_la_CPPFLAGSおよびlib_la_LDFLAGSに指定されています。
  • --coverageオプションは、テスト実行可能ファイルMakefile.amのAM_CPPFLAGSおよびAM_LDFLAGSに指定されています。
  • テストソースファイルは、Google Test(C++ユニットテストフレームワーク)を利用します
29
deuberger

私はついにgccの人たちから助けを得て、この問題を解決しました。こちらのスレッドを参照してください: http://gcc.gnu.org/ml/gcc-help/2010-09/msg00130.html

共有ライブラリ(.so)ファイルがあったので、.gcdaファイルが.libsディレクトリに配置されていたことがわかりました。 gcovに出力を生成させるには、.gcdaファイルをソースファイルがあった場所まで1レベル上に移動する必要がありました。

また、他の誰かが同じ問題のいくつかに遭遇した同様のスレッドがあります: gcovは共有オブジェクトを処理できますか?

27
deuberger