首页 > 解决方案 > 在调试信息压缩标志的各种组合下,汇编器和链接器之间的压缩调试信息如何流动?

问题描述

gcc 和 binutils 中有许多关于调试信息压缩的标志。在这里,我对标准 C++ 项目中以下四个标志之间的相互作用感兴趣,该项目使用编译器创建许多目标文件,然后使用编译器驱动将目标文件组合成各种最终二进制文件的链接步骤:

所以,我们可以想象四种可能性。我们已经编译了我们的目标文件,无论是在汇编-Wa,--compress-debug-sections=zlib-gabi器中还是使用-Wl,--compress-debug-sections=zlib-gabi.

-Wa,--nocompress-debug-sectionscompile 和 compile的组合-Wl,--compress-debug-sections=none是无趣的。大概根本没有发生压缩。

接下来的两个组合更有趣:

我对这两种情况的假设和理解大多正确吗?如果不是,我误解了什么?

这留下了最有趣的情况:

总的来说,我只是想了解我应该在构建系统中将这些标志默认为什么以获得最佳构建性能。我当然会做一些基准测试,但我也有兴趣了解这里的操作理论,因为它将帮助我了解围绕这些标志的任何构建基准测试结果。

标签: linkercompressionbinutils

解决方案


可悲的是,我对这个话题并不了解。
但是,我偶然发现了以下内容,这可能会回答您问题的第一部分。

最近, -Wa,--compress-debug-sections 选项已可用。此选项将发送到链接器的目标文件的总大小减少了三分之一以上,因此调试信息现在占目标文件总大小的 70-80%。输出文件不受影响:链接器解压调试信息以便链接,并输出未压缩的结果(链接时有重新压缩调试信息的选项,但此步骤只会减小输出文件的大小改善链接时间或内存使用)。

来自https ://gcc.gnu.org/wiki/DebugFission (部分:调试信息大小问题

所以,看看那句话,你对这两种情况的假设似乎是正确的:

  • -Wa,--compress-debug-sections=zlib-gabi-Wl,--compress-debug-sections=none
  • -Wa,--nocompress-debug-sections-Wl,--compress-debug-sections=zlib-gabi

推荐阅读