web-dev-qa-db-ja.com

リンク時に__gcov_init未定義参照の問題を解決する方法

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

  1. コンパイラフラグ_CFLAGS = --coverage_およびリンカーオプション_LDFLAGS := --coverage_または_LOCAL_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'

誰でもこの問題に関するいくつかの提案を提供できますか?

36
lilingmzai

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

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

CFLAGS: -fprofile-arcs -ftest-coverage

LFLAGS: -lgcov --coverage

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

お役に立てば幸いです!

46
Rajen

-lgcovとリンクしていますか? Makefileを使用している場合は、Makefileを確認するのに役立ちます。

9
niglesias

この問題を解決するには、LDFLAGSを提供する必要があります。

LDFLAGS += " -lgcov --coverage"
1
Ajay.kundu

Flagsではなく、プロファイルされるオブジェクトの右側に '-lgcov'を配置する必要があることがわかりました。何かのようなもの。 gcc -pg -o myprog myprog.o -lgmp.a -lgcov

1
John Gatrell

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

0
Tod