現在、Cコードカバレッジの調査に取り組んでいますが、次の問題、GCCバージョン4.4.6に遭遇しました。
CFLAGS = --coverage
_およびリンカーオプション_LDFLAGS := --coverage
_または_LOCAL_LDLIBS := --coverage
_を追加し、エラーが発生しました。_undefined reference to '__gcov_init'" and "undefined reference to '__gcov_merge_add'
_
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'
誰でもこの問題に関するいくつかの提案を提供できますか?
このアプローチを試してください:
次のオプションを使用して、カバレッジを生成するコードをコンパイルします。
CFLAGS: -fprofile-arcs -ftest-coverage
LFLAGS: -lgcov --coverage
これで問題が解決しない場合は、アプリケーションの構造に関する情報を提供してください。つまり、単一のプログラムであるか、共有/静的ライブラリを含むアプリケーションであるかなどです。
お役に立てば幸いです!
-lgcovとリンクしていますか? Makefileを使用している場合は、Makefileを確認するのに役立ちます。
この問題を解決するには、LDFLAGSを提供する必要があります。
LDFLAGS += " -lgcov --coverage"
Flagsではなく、プロファイルされるオブジェクトの右側に '-lgcov'を配置する必要があることがわかりました。何かのようなもの。 gcc -pg -o myprog myprog.o -lgmp.a -lgcov
どの変更が最終的に私のためにトリックを行ったかはわかりませんが、-fprofile-generate
フラグだったと思います。 GNAT GPSを使用して、左側のSwitches
タブに移動し、上部のAda Linker
タブを選択しました。次に、Code Coverage
のチェックボックスを有効にしました。そうそう、同じエリアのBuilder
タブでRecompile if switches changed
チェックボックスを有効にすると、歯ぎしりを大幅に節約できることがわかりました。おそらくプロにとっては速度が遅くなりますが、私はそれが役に立ったと思います。