You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编译含__gcov_dump的代码时出现未定义引用错误求助

解决__gcov_dump未定义的链接错误

核心原因:C++名字修饰导致符号不匹配

__gcov_dump是GCC提供的C语言接口函数,当用g++编译时,C编译器会对函数名进行名字修饰(Name Mangling),而libgcov库中该函数的符号是C语言格式的,因此会出现"未定义引用"的错误。即使你包含了<gcov.h>,如果头文件没有针对C编译环境添加extern "C"声明,编译器依然会按照C++规则处理这个函数名。

解决方案

方案1:给__gcov_dump添加C语言链接声明

修改代码,将<gcov.h>的包含放在extern "C"块中,或者单独声明该函数的C链接:

修改后的代码示例:

#include <stdio.h>

extern "C" {
#include <gcov.h>
}

int main()
{
  int i, total;

  total = 0;

  for (i = 0; i < 10; i++)
    total += i;

  if (total != 45)
    printf ("Failure\n");
   else
    printf ("Success\n");

  __gcov_dump();
}

方案2:用gcc编译而非g++

你的代码是标准C代码,直接使用gcc编译可以避免C++名字修饰的问题:

gcc --coverage tmp.c

方案3:调整链接库顺序(若坚持用g++)

如果一定要用g++编译,确保-lgcov放在源文件之后(链接器会按顺序查找符号),不过更推荐方案1:

g++ --coverage tmp.c -lgcov

验证

编译成功后运行程序,会生成对应的.gcda文件,说明__gcov_dump已正常工作。

内容的提问来源于stack exchange,提问作者Desperado17

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 13:35:19