2012-04-04 5 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 :

또한 모든 세 단계

에서

봐 동의어로 --coverage 옵션을 사용할 수 있습니다. lcov/gcov를 사용하여 커버리지를 취하는 동안 경로가 중요한 역할을합니다.

따라서 바이너리 (전체 경로 문자열)를 만든 경로와 바이너리를 실행하는 경로가 정확히 동일해야합니다.

바이너리의 작성과 바이너리의 실행이 다른 장소 (개발 환경과 실제 보드에서 하나)에 있으므로 소프트 링크/바로 가기를 사용하여 비슷한 경로를 만들고 따라서 실행합니다. 실행 파일. 마지막으로 개발 환경에서 보고서를 생성 할 수 있습니다 (일반적으로 실제 플랫폼에 lcov 도구 지원이 없을 수도 있기 때문에).