Linker 链接时如何解决uu gcov_init未定义引用问题
我现在从事C代码覆盖率研究,遇到了以下问题,GCC版本4.4.6:Linker 链接时如何解决uu gcov_init未定义引用问题,linker,undefined-reference,gcov,Linker,Undefined Reference,Gcov,我现在从事C代码覆盖率研究,遇到了以下问题,GCC版本4.4.6: 添加了编译器标志CFLAGS=--coverage和链接器选项LDFLAGS:=--coverage或LOCAL\u LDLIBS:=--coverage并获得错误: 对“\uuugcov\u init”和“对“\uugcov\u merge\u add”的未定义引用的未定义引用 添加了选项LOCAL\u LDFLAGS:=--coverage,并获得链接错误: libgcov.a(\u gcov.o):函数中的\uu gcov
CFLAGS=--coverage
和链接器选项LDFLAGS:=--coverage
或LOCAL\u LDLIBS:=--coverage
并获得错误:对“\uuugcov\u init”和“对“\uugcov\u merge\u add”的未定义引用的未定义引用
LOCAL\u LDFLAGS:=--coverage
,并获得链接错误:libgcov.a(\u gcov.o):函数中的\uu gcov\u set\u sampling\u rate:未定义对“\uu gcov\u sampling\u rate”的引用
libgcov.a(_gcov.o):在函数gcov_exit中:未定义对“u gcov_pmu_profile_filename”的引用
libgcov.a(_gcov.o):在函数中u gcov_init:对“u gcov_pmu profile_options”u gcov_pmu top_n_address”的未定义引用
有人能提供一些关于这个问题的建议吗?您是否正在链接
-lgcov
如果您使用的是Makefile,那么查看一下它将非常有帮助。尝试以下方法:
使用以下选项编译要为其生成覆盖率的代码:
CFLAGS:-fprofile弧-ftest覆盖率
LFLAGS:-lgcov——覆盖范围
如果这不能解决问题,那么请提供有关应用程序结构的一些信息,例如,是单个程序还是包含共享/静态库的应用程序等
希望有帮助 我不能确定哪一个更改最终对我起了作用,但我认为是
-fprofile generate
标志。使用GNAT GPS,我进入左侧的开关
选项卡,然后选择顶部的Ada链接器
选项卡。然后我启用了代码覆盖率
的复选框。哦,是的,我发现在同一区域的Builder
选项卡上,如果启用recompileif switches changed
复选框,可以避免很多咬牙切齿的情况。对于专业人士来说,可能会减慢速度,但我发现这很有帮助。我发现我必须将'-lgcov'放在要分析的对象的右侧,而不是放在标志中。差不多。
gcc-pg-o myprog myprog.o-lgmp.a-lgcov您必须提供LDFLAGS来解决此问题
LDFLAGS += " -lgcov --coverage"
是的,我也尝试过-lgcov链接选项,但仍然遇到上述问题1)。谢谢你的回复,这是我错过的。谢谢成功了,太棒了!我有一个自定义的bash构建脚本,其中包含用于构建链接部分的
gcc${OBJECT\u FILES[@]}-o“$build\u DIR/$PROGRAM\u NAME”
。像这样简单地添加-lgcov
就可以了gcc${OBJECT\u FILES[@]}-lgcov-o“$BUILD\u DIR/$PROGRAM\u NAME”
。对于我来说,将--coverage添加到LFLAGS解决了这个问题。早些时候,我只对LFLAGS使用了-lgcov。我相信在-LFLAGS
中添加-coverage
只对Mac上的LLVM编译器是必要的