gpt4 book ai didi

gcc - 为什么常见的 C 编译器在输出中包含源文件名?

转载 作者:行者123 更新时间:2023-12-03 02:54:50 25 4
gpt4 key购买 nike

我是从this recent answer学到的即使未启用调试,gccclang 也将源文件名作为元数据包含在二进制文件中的某个位置。

我真的不明白为什么这应该是一个好主意。除了微小的隐私风险之外,当优化生成的二进制文件 (-Os) 的大小时也会发生这种情况,这看起来效率很低。

为什么编译器要包含这些信息?

最佳答案

GCC 包含文件名的原因主要是出于调试目的,因为它允许程序员识别给定符号来自哪个源文件,如 ELF spec p1-17 中(简洁地)概述的那样。并在 some Oracle docs on linking 中进一步扩展.

this SO question 给出了使用 STT_FILE 部分的示例。 .

我仍然很困惑,为什么即使您指定 -g0,GCC 和 Clang 仍然包含它,但您可以使用 - 阻止它包含 STT_FILE s。我找不到对此的任何解释,也找不到为什么 STT_FILE 包含在 ELF 规范中的“官方原因”(这是非常简洁的)。

关于gcc - 为什么常见的 C 编译器在输出中包含源文件名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32413176/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com