【问题标题】:Difference between load-time and run-time dynamic linking加载时和运行时动态链接之间的区别
【发布时间】:2010-10-07 19:47:53
【问题描述】:

加载时动态链接和运行时动态链接有什么区别?

【问题讨论】:

标签: dll


【解决方案1】:

加载时动态链接

当一个可执行文件在构建时链接到一个 DLL 时,链接器不会插入目标代码,而是插入一个 stub,它基本上说这个名称的 function 是位于这个DLL中。

现在,当可执行文件运行时,可执行文件的一些位将丢失(即函数存根),因此在允许程序运行之前,程序加载器通过将这些丢失的函数替换为DLL 文件的入口点。

只有在所有存根都被替换(即解析)后,可执行文件才能被允许运行。

即加载时动态链接。

运行时动态链接

在这种情况下,可执行文件没有链接到任何 DLL 库文件,因此它不会在 dll 中包含任何存根,因此程序加载器在运行可执行文件时没有问题。

但是,从 DLL 中访问函数的任务留给了可执行文件,并且可以使用 GetProcAddress Windows API 来完成。

即运行时动态链接。

【讨论】:

    【解决方案2】:

    您忘记了“作业”标签。

    加载时链接意味着您要链接的 DLL 在您的应用程序启动时加载,无论您是否实际使用该 DLL 中的功能。动态链接意味着 DLL 的功能仅在实际需要时才加载。

    【讨论】:

      【解决方案3】:

      加载时动态链接由操作系统在加载应用程序时执行。 OS 使用链接器在文件中放置的信息来定位 dll 的名称,然后搜索那些 dll,如果找不到 Dll,它就简单地终止并给出错误消息,否则,OS 将 DLL 映射到进程的虚拟地址空间并增加 DLL 引用计数。

      【讨论】:

        猜你喜欢
        • 2011-01-04
        • 2012-04-20
        • 1970-01-01
        • 1970-01-01
        • 2011-11-22
        • 1970-01-01
        • 2014-02-14
        • 2014-02-08
        相关资源
        最近更新 更多