5

-fprofile-arcsリンクするために&-ftest-coverageと何も使用せずにgcovを実行しようとしました。

このエラーが発生していました:-

 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'

どんな助けでも投票していただければ幸いです。

ありがとう。

4

4 に答える 4

10

と でコンパイルし-fprofile-arcsます-ftest-coverage-lgcov共有オブジェクトの生成時にリンクします。それが動作します。

また、--coverageオプションを 3 つのステップすべての同義語として使用することもできます

詳細については、 gcc インスツルメンテーション オプションを参照してください。

于 2012-05-16T04:09:13.433 に答える
1

上記のcrazy_progで述べたように、コンパイル フラグを検討した後、「パス」を確認します。lcov/gcov を使用してカバレッジを取得する際、パスは重要な役割を果たします。

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

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

于 2015-10-13T11:08:43.400 に答える
0

上記のコンパイル オプションとリンク オプションに加えて、ctrl-c などの適切でない方法でプログラムを強制終了すると、プログラムは正常に終了せず、gcda ファイルが生成されないという意見があります。

この問題を解決して、ctrl-c を使用しても gcda ファイルが生成されるようにするには、以下を実行します。

void handler(int signum)
{
     /* SIGTERM dnd clean up (close file descriptors, etc).  */
 
     exit(0);
}
 
int main(int argc, char *argv[])
{
    signal(SIGTERM, handler);
    signal(SIGHUP, handler);
    signal(SIGINT, handler);
    ....
}
于 2022-02-18T04:55:44.137 に答える