Gcc gcov未生成gcda文件

Gcc gcov未生成gcda文件,gcc,gcov,Gcc,Gcov,我尝试使用-fprofile arcs&-ftest覆盖范围运行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/"Dumm

我尝试使用
-fprofile arcs
&
-ftest覆盖范围
运行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'
如有任何帮助,我们将不胜感激


谢谢。

使用
-fprofile arcs
-ftest coverage
编译。在生成共享对象期间,与
-lgcov
链接。它会起作用的

您也可以使用
--coverage
选项作为所有三个步骤的同义词


查看:在考虑编译标志后,如上文所述,了解更多信息

, 检查“路径”。在使用lcov/gcov进行覆盖时,path起着重要作用

因此,创建二进制文件的路径(完整路径字符串)和运行二进制文件的路径应该完全相同


出于我的目的,由于二进制文件的创建和执行在不同的位置(一个在开发环境中,另一个在实际板中),所以使用软链接/快捷方式,我创建了类似的路径,并因此运行可执行文件。最后,您可以在开发环境中生成报告(通常,因为船上的实际平台可能不支持lcov工具)。

我刚刚发现,如果我向程序发送sig kill或sig term,则只生成GCNO文件,而不生成gcda文件。

您可以向我们显示Makefile或编译字符串吗?很可能您将配置文件标志附加到了错误的目标对象。注意:对编译和链接使用
--coverage
会自动转换为您提供的标志。这是海湾合作委员会为使事情变得更容易而提供的一种惯例。也是未来的证明。享受吧!我尝试了这些命令,但仍然没有输出gcda文件:
g++-fprofile arcs-ftest coverage-lgcov main.cpp
我还遗漏了什么吗?@naive231我个人有这个问题,因为我在主方法的末尾有一个for(;;)无限循环。程序需要退出才能正确生成gcda文件。即使设置正确,Eclipse也可能需要运行二进制文件来生成.gcda文件。如果您只看到.gcno文件,则可能会出现这种情况。因此,是否有任何信号退出进程并保留生成.gcda文件,例如SIGHUP或SIGINT?@Melebius我刚才遇到了相同的问题,并发现:。使用SIGTERM和处理SIGTERM(如链接中所述)对我很有效。