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

使用GCC -gsplit-dwarf生成的多个.dwo文件是否可合并为单个文件?

背景

我所在项目需要获取代码调试信息,目前有两种可行方案:

  • 使用-g参数编译,之后通过GNU二进制工具strip和objcopy将调试信息剥离为单独文件;
  • 采用-gsplit-dwarf参数编译。
问题

第二种方案会为应用的每个编译单元生成一个.dwo文件,虽能提升链接速度,但编译单元数量庞大时会带来管理负担。请问是否有办法将所有.dwo文件按对应二进制合并为单个文件?

系统信息
  • 编译器:GCC工具链
  • 操作系统:CentOS/RH 7/8

解决方案

可使用GNU binutils自带的dwp(DWARF Packaging Tool)工具完成.dwo文件的合并,操作流程如下:

  1. 编译阶段正常添加-gsplit-dwarf参数,生成.o目标文件和对应.dwo文件
  2. 完成最终二进制链接后,执行命令合并所有关联.dwo为单个调试包:
    dwp [目标二进制文件路径] -o [输出合并调试文件路径].dwp

如果已明确所有.dwo文件路径,也可直接指定输入文件合并:
dwp *.dwo -o [输出合并调试文件路径].dwp

合并完成后可删除零散.dwo文件,调试时GDB会自动识别同目录下与二进制同名的.dwp文件,调试体验与使用零散.dwo完全一致。

CentOS/RH 7/8系统默认binutils包已包含dwp工具,若环境中无该命令,执行yum install binutils即可安装。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 18:06:08