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

Xcode13编译出现Undefined symbol: ___gcov_flush错误如何解决?

问题根因

Xcode 13起官方正式移除了对传统Gcov工具的内置支持,默认改用llvm-cov作为覆盖率统计实现,原有___gcov_flush接口已被废弃,因此Xcode 12可正常编译的代码升级后会触发链接报错。
报错完整信息如下:

Undefined symbols for architecture x86_64: "___gcov_flush", referenced from: -[AppDelegate applicationDidEnterBackground:] in AppDelegate.o ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation)
解决方案
  • 方案1:替换接口调用(推荐)
    直接删除原有extern导出___gcov_flush的相关代码,改用LLVM官方提供的覆盖率刷新接口:
    1. 导入对应头文件
    #import <llvm-cov/CoverageMappingWriter.h>
    
    1. 把原代码中所有调用___gcov_flush()的位置,替换为__llvm_profile_write_file()即可。该接口功能和旧接口完全一致,会将内存中缓存的覆盖率数据写入本地.profraw格式的统计文件。
  • 方案2:临时兼容旧逻辑(仅作过渡使用)
    如果暂时不想修改原有代码逻辑,可以在项目的Build Settings中找到Other Linker Flags配置项,添加-lgcov参数强制链接兼容库,即可编译通过。该方案不建议长期使用,后续Xcode版本会彻底移除该兼容支持。
  • 配套配置校验
    确认Build Settings中以下两项配置为开启状态:
    • Generate Legacy Test Coverage Files 设置为 YES
    • Instrument Program Flow 设置为 YES
      调整后重新编译即可正常生成覆盖率统计所需的相关文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 14:45:10