动态链接和动态加载之间的区别

时间:2016-08-16 06:58:50

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

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

的信息
  

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

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

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

您能用简单的单词解释动态链接和动态加载之间的差异吗?我还是很困惑。

先谢谢!

1 个答案:

答案 0 :(得分:1)

你好像被术语挂了。 “动态链接”一词对实际发生的事情用词不当。

链接器通常处理三种类型的文件:

  1. 对象文件
  2. 对象库
  3. 共享库
  4. 对象库只是一个包含可以从中提取的其他目标文件的文件,因此我将忽略该替代方案。

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

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

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

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

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

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

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

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

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