2012-04-04 129 views
4

-fprofile-arcs & -ftest-coverageとgcovを実行しようとしましたが、リンクするために何もしませんでした。gcovがgcdaファイルを生成しない

それはこのエラーを与えていた: -

hidden symbol `__gcov_init' in /home/mojave/tools/gcc-4.4.1/amd64/bin/../lib/gcc/x86_64-unknown-linux-gnu/4.4.1/libgcov.a(_gcov.o) is referenced by DSO 

とプログラムは終了します。

コマンドは

bsub -g /mojave/build/"DummyDate" -J compile-obj/linux24rhel3_x86_64_GCOV64/DXp.o -I -q DFM -S 8192 -R "(model==OPTERON_250)" '/usr/bin/time --format="   ...finished DXp [`hostname`] [%E s with %P CPU]" /home/mojave/tools/gcc-4.4.1/amd64/bin/g++ -fPIC -Wall -Wno-deprecated -DTCL_8_5 -m64 -march=opteron -DLITTLE_ENDIAN_PLATFORM -DARCH=amd64 -DARCH_amd64 -DARCH_BITS=64 -DARCH_BITS_64 -fsigned-char -msse3 -D__DISABLE_MULTITHREAD__ -D_CPP_NUMERIC_LIMITS -mfpmath=sse,387 -mmmx -m3dnow -pipe -Dgcc -DLICENSE_ALWAYS_GOOD -I/home/mojave/tools/flexlm/include/v8.4 -DNO_SUPPORT_STABIE -DGCOV -I../dxpclient -I/home/mojave/tools/bzip2-1.0.2/amd64/include -I/home/mojave/tools/zlib-1.2.3/amd64/include -I/home/mojave/tools/tcltk8.5.2/amd64//include -I/home/mojave/tools/tcltk8.5.2/amd64//include -g -fprofile-arcs -ftest-coverage -DBUILD_DATE=\""UNSET"\" -DVERSION_NUMBER=\"Dum.Dum.Dum.Dummy\" -DEXT_VERSION_NUMBER=\"Dum.Dum.Dum.Dummy\" -DLAST_RELEASE_VERSION=\"1.1614\" -Wreturn-type -DTCL_8_5 -DGOOGLE_MALLOC -L../dx/linux24rhel3_x86_64_GCOV64/ -ldx -o obj/linux24rhel3_x86_64_GCOV64/DXp obj/linux24rhel3_x86_64_GCOV64/DXp.o -Wl -lgcov /home/mojave/tools/zlib-1.2.3/amd64/lib/libz.a -L/home/mojave/tools/bzip2-1.0.2/amd64/lib -lbz2 -ldl' 

すべてのヘルプは、投票を上にして理解されるであろう、コンパイルします。

ありがとうございました。

+0

Makefileまたはコンパイル文字列を表示できますか?誤ったターゲットオブジェクトにプロファイルフラグを付加する可能性があります。 – Shrey

答えて

7

-fprofile-arcs-ftest-coverageでコンパイルします。共有オブジェクトの生成中に-lgcovにリンクしてください。それが動作します。 crazy_prog、 チェック「パス」で前述したように、コンパイルフラグを考慮した後の詳細

+5

注:コンパイルとリンクの両方に '--coverage'を使うと、自動的に与えられたフラグに変換されます。これは、gccがより簡単に行うために提供する慣習です。また、未来を保証する。楽しい ! – Offirmo

+0

私はこのコマンドを試しましたが、まだgcdaファイルがありません: 'g ++ -fprofile-arcs -ftest-coverage -lgcov main.cpp' 私は他のことを忘れていませんか? – naive231

+0

@ naive231私は主な方法の最後にfor(;;)無限ループを持っていたので、私は個人的にこの問題を抱えていました。 gcdaファイルが正しく生成されるためには、プログラムを終了する必要があります。 – user3062913

0

ためgcc instrumentation options

はまた、あなたはすべての3つのステップ

ルックの同義語として--coverageオプションを使用することができます。 lcov/gcovを使用してカバレッジを取っている間、パスは重要な役割を果たします。

したがって、バイナリ(完全パス文字列)を作成したパスと、バイナリを実行しているパスはまったく同じである必要があります。

バイナリの作成とバイナリの実行が異なる場所(開発環境と実際のボードの1つ)にあるので、ソフトリンク/ショートカットを使用して同様のパスを作成して実行します実行可能ファイル最後に、開発環境でレポートを生成することができます(通常、実際のプラットフォームにはlcovツールのサポートがないため)。

関連する問題