更改 GNU 编译器中的 -g 标志使 C++ 可执行 [重复]

Posted

技术标签:

【中文标题】更改 GNU 编译器中的 -g 标志使 C++ 可执行 [重复]【英文标题】:Changes -g flag in GNU compiler makes in executable for c++ [duplicate] 【发布时间】:2013-08-08 17:52:16 【问题描述】:

添加 -g 标志后实际上会对可执行文件进行哪些更改?

【问题讨论】:

我想这个问题已经在这里回答了link 【参考方案1】:

主要变化将是二进制文件大小的增加,因为它现在将包含额外的调试信息。根据您要构建的目标,它可能(或不)在执行期间产生任何其他影响。例如,在生成 ELF 时,所有调试信息都保存在单独的部分中,除非在调试器中运行,否则甚至不需要将其加载到内存中(因此即使二进制文件更大,也不需要更多的实际内存来运行)

【讨论】:

请问ELF代表什么? @StephenJacob:Executable and Linkable Format。在包括linux在内的一些平台上是二进制格式。 罗德里格斯:非常感谢【参考方案2】:

基本上,它包含有关程序源的更多信息,否则这些信息会在编译过程中丢失。这包括更多的符号名称,以及机器代码对应的行号。请参阅this reference 了解更多详情。

【讨论】:

【参考方案3】:

调试信息被添加到您的可执行文件中。看到这个link。

【讨论】:

以上是关于更改 GNU 编译器中的 -g 标志使 C++ 可执行 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

用于 Ivy Bridge 架构的 GNU Fortran 编译器优化标志

设置 C 标准标志启用 GNU 扩展

使列表控件中的单个项目可编辑(C++、MFC)

通过编译器环境变量或 C 和 C++ 中的命令行标志指定库路径?

从 C++ 更新 QML Window 属性标志

C++ 中的 GNU Radio QT GUI 接收器