51

現在、C コード カバレッジの調査に取り組んでおり、次の問題、GCC バージョン 4.4.6 に遭遇しました。

  1. コンパイラ フラグCFLAGS = --coverageとリンカー オプションを追加するLDFLAGS := --coverageLOCAL_LDLIBS := --coverage、次のエラーが発生しました。

undefined reference to '__gcov_init'" and "undefined reference to '__gcov_merge_add'

  1. オプションを追加LOCAL_LDFLAGS := --coverageし、リンク エラーが発生しました:

libgcov.a(_gcov.o): in function __gcov_set_sampling_rate: undefined reference to '__gcov_sampling_rate' libgcov.a(_gcov.o): in function gcov_exit: undefined reference to '__gcov_pmu_profile_filename' libgcov.a(_gcov.o): in function __gcov_init: undefined reference to '__gcov_pmu_profile_options' '__gcov_pmu_top_n_address'

この問題に関する提案を手伝ってくれる人はいますか?

4

7 に答える 7

65

このアプローチを試してください:

次のオプションを使用して、カバレッジを生成するコードをコンパイルします。

CFLAGS: -fprofile-arcs -ftest-coverage

LFLAGS: -lgcov --coverage

これで問題が解決しない場合は、アプリケーションの構造に関する情報を提供してください。つまり、単一のプログラムなのか、共有/静的ライブラリを含むアプリケーションなのかなどです。

それが役立つことを願っています!

于 2013-09-13T04:09:34.543 に答える
1

どの変更が最終的にうまくいったかはわかりませんが、-fprofile-generateフラグだったと思います。GNAT GPS を使用Switchesして、左側のタブに移動Ada Linkerし、上部のタブを選択しました。次に、のチェックボックスを有効にしましたCode Coverage。そうそうBuilder、同じ領域のタブでチェックボックスを有効にすると、Recompile if switches changed歯ぎしりを大幅に節約できることがわかりました。おそらくプロにとっては物事が遅くなりますが、私はそれが役に立ちました.

于 2015-03-06T18:15:23.073 に答える
0

私もこの問題を見てきました。上記の回答のほとんどが、リンク時に lcov/gcov ライブラリを追加する必要があることを示していました。私たちはcmakeを使用しています.CmakeLists.txtファイルには欠けていました

target_link_libraries(${TARGET_NAME} PRIVATE gcov)

これはもちろん、ビルド フラグ「--coverage」に加えて必要でした (「--coverage」または「-fprofile-arcs -ftest-coverage」を個別に使用できることに注意してください)。

于 2021-12-20T14:29:02.057 に答える