Linker 链接时如何解决uu gcov_init未定义引用问题

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

我现在从事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\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编译器是必要的