2012-04-04 231 views
4

我試圖運行gcov與-fprofile-arcs & -ftest-coverage並沒有任何鏈接。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 2012-05-02 07:09:17

回答

7

編譯-fprofile-arcs-ftest-coverage。在生成共享對象期間與-lgcov鏈接。它會工作。

您也可以使用--coverage選項作爲同義詞所有三個步驟

看:gcc instrumentation options瞭解更多信息

+5

注意:使用'--coverage'編譯和鏈接會自動轉換爲您提供的標誌。這是gcc提供的一種方便,讓事情變得更簡單。也是面向未來的。請享用 ! – Offirmo 2012-10-10 15:01:12

+0

我嘗試這個命令,但仍然沒有gcda文件: 'g ++ -fprofile-arcs -ftest-coverage -lgcov main.cpp' 我想念其他什麼嗎? – naive231 2016-05-23 03:16:49

+0

@ naive231我個人有這個問題,因爲我的主要方法的末尾有一個for(;;)無限循環。該程序需要退出才能正確生成gcda文件。 – user3062913 2017-05-30 17:04:36

0

考慮編譯標誌後,如上通過crazy_prog, 檢查「路徑」中提到。在使用lcov/gcov進行覆蓋時,路徑起着重要作用。

因此,創建二進制文件的路徑(完整路徑字符串)以及運行二進制文件的路徑應完全相同。因爲我的目的,二進制的二進制和執行的創建是在不同的地方(一個在開發環境和其他實際的板),所以使用軟鏈接/快捷方式,我創建了類似的路徑,並因此運行可執行文件。最後,可以在開發環境中生成報告(通常,因爲實際的板上平臺可能沒有lcov工具支持)。