【问题标题】:Difference between dynamic linking and dynamic loading动态链接和动态加载的区别
【发布时间】:2016-08-16 06:58:50
【问题描述】:

引用维基百科关于动态加载

动态加载是计算机程序可以在运行时将库加载到内存中的一种机制,与静态链接和动态链接不同,动态加载允许计算机程序在没有这些库的情况下启动。

所以,如果我错了,请纠正我,但在动态加载中,库是通过加载库函数显式加载的。

而在动态链接中,加载和链接可执行文件所需的共享库被推迟到运行时,操作系统 负责将库的内容从持久存储复制到 RAM。

您能否再简单地解释一下动态链接和动态加载之间的区别?我还是一头雾水。

提前致谢!

【问题讨论】:

标签: operating-system dynamic-linking dynamic-loading


【解决方案1】:

您似乎对术语很感兴趣。术语“动态链接”对于实际发生的事情是用词不当。

链接器一般处理三种类型的文件:

  1. 目标文件
  2. 对象库
  3. 共享库

对象库只是一个文件,其中包含可以从中提取的其他对象文件,因此我将忽略该替代方案。

一个目标文件包含一个由文件定义的全局符号表和一个由文件引用的全局符号表。链接器将文件中的引用“链接”到另一个文件中的定义。它将链接文件的代码和数据内容添加到可执行文件(或共享库)中。

共享库包含一个定义的通用符号表和该库引用的通用符号。链接器将目标文件中的全局符号引用“链接”到共享库文件。链接完成后,可执行文件(或共享库)知道哪个共享库文件包含该符号,但不知道该符号在哪里。

有时,链接此类共享库的过程称为“动态链接”。

可执行文件有一个全局符号引用表,已映射到通用符号共享库。

当您运行可执行文件时,程序加载器会检查引用的共享库的可执行文件。然后它将(1)加载共享库; (2) 阅读图书馆的通用符号表,查找引用符号的地址; (3) 修复可执行文件中对这些符号的引用。

因为共享库可以引用其他共享库,所以这是一个递归过程。

有时,在运行时加载引用共享库的程序的过程称为“动态链接”。 (现在我们对同一个术语有两个定义。)

许多操作系统都提供相同的系统服务,用于加载共享库并在共享库中查找通用符号的地址,以供应用程序使用。在运行时(加载应用程序之后),应用程序可以通过 (1) 加载共享库和 (2) 定位所需符号来动态访问函数或其他通用符号。

这就是你所说的“动态加载”。

【讨论】:

    猜你喜欢
    • 2012-04-20
    • 2014-02-08
    • 2012-04-16
    • 2011-01-04
    • 2011-05-08
    • 2013-06-19
    • 1970-01-01
    • 2010-10-07
    相关资源
    最近更新 更多