【问题标题】:who is responsible for symbolic reference linker or loader谁负责符号引用链接器或加载器
【发布时间】:2017-03-29 16:23:32
【问题描述】:

我已经阅读了很多关于链接器或加载器的文章,但是
我很困惑谁负责将对象模块中的绝对引用替换为对其他对象模块中位置的符号引用。 链接器是否替换其他对象模块中的符号引用或加载器在程序加载时在主内存中进行此操作

【问题讨论】:

  • 您应该能够通过实验看到这一点。对象(汇编器/编译器)负责为其需要/拥有的东西放置符号名称。链接器还将添加一些符号名称,当然对于链接器脚本中定义的项目,链接器是唯一可以全局连接对象之间点的链接器,因此如果一个对象具有外部对象而另一个对象包含该项目,则链接器将放置项目并更新两者,因为它将它们链接在一起。
  • 不确定加载器的作用是什么,定义东西有点晚了
  • 请提供您感兴趣的对象和二进制中的数据项及其符号的示例。基本上提供示例。

标签: assembly compiler-errors compiler-construction linker loader


【解决方案1】:

解决目标模块之间的符号依赖关系传统上是链接器的职责。链接器检查所有目标文件并解析所有符号引用并构建一个整体可执行文件。但是,当我们引入共享库(即可以在不同的可执行文件之间共享并在加载时链接到程序的对象模块)时,这种方法就会失效。为了完成这项工作,链接器的某些部分被移动到加载器中,使依赖关系的解析成为共同的责任。链接器解决目标文件和静态库之间的依赖关系,而加载器解决可执行文件和任何共享库之间的依赖关系。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-08
    • 2012-10-04
    • 1970-01-01
    • 2015-03-28
    相关资源
    最近更新 更多