【问题标题】:Difference between input and output sections in a linkerfile?链接器文件中输入和输出部分的区别?
【发布时间】:2018-09-05 16:01:31
【问题描述】:

虽然在生成的二进制文件或 ELF 文件的上下文中可以清楚什么是节,但文档中的许多地方(独立于使用的编译器)将它们称为输入或输出节。

这些有什么区别?

【问题讨论】:

    标签: linker ld elf linker-scripts


    【解决方案1】:

    链接器使用目标文件(可能还有共享库)并输出 可执行或共享库。输入目标文件由命名的 部分 - .text.data.rodata.bss 等。输出文件也是如此。

    它 是链接器工作的主要部分,将所有的 input 部分组合起来 将所有输入对象文件中的相同名称放入单个 输出 部分 在输出文件中使用该名称。例如。输入的所有.text 部分 目标文件对输出文件的.text 部分有贡献。

    如果链接器确定某些输入部分是多余的,则可能会从输出文件中丢弃它们。

    【讨论】:

    • 一般来说,源代码中分隔的部分(#pragma like)是输入部分,最终链接器文件中引用的部分是输出部分吗?
    • @urnenfeld 在标准 C 或 C++ 中,没有定义节的语法方法。节定义通常完全是编译器的事情。编译器可能具有非标准扩展,可让您将对象分配给命名节。对于 GCC,请参阅 Common Variable AttributesCommon Function Attributes 中的 __attribute__ ((section ("<section-name>"))) 的文档。此类扩展用于特殊目的。
    • @urnenfeld 任何用源语言扩展定义的节都将成为编译器生成的目标文件的节,并将成为输入节链接器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-07
    • 2014-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-21
    相关资源
    最近更新 更多