加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

dll – 加载时间动态链接和运行时动态链接之间的区别

发布时间:2020-12-13 20:13:52 所属栏目:Windows 来源:网络整理
导读:将程序加载到内存中时,加载时动态链接和运行时动态链接有什么区别? 加载时间链接是指当操作系统将可执行文件/库加载到内存时,由可执行文件(或另一个库)引用的库中的符号被处理. 运行时链接是指当您使用操作系统提供的API或通过库在需要时加载DLL或DSO,然后
将程序加载到内存中时,加载时动态链接和运行时动态链接有什么区别?
加载时间链接是指当操作系统将可执行文件/库加载到内存时,由可执行文件(或另一个库)引用的库中的符号被处理.

运行时链接是指当您使用操作系统提供的API或通过库在需要时加载DLL或DSO,然后执行符号解析.

我比Windows DLL更了解Linux DSO,但原则应该是一样的. .NET库可能不同.

在linux中,插件架构是这样完成的.您的程序将使用运行时链接加载库并调用某些功能.然后可能卸载它.它还允许导出加载相同符号的多个库,而不会发生冲突.我认为DLL将以相同的方式工作.

可执行文件在其符号表中具有需要由某个库填充的“空格”.这些空格通常是在加载时或编译时填写的.您可以通过使用运行时链接来否定符号表中“空格”的需要.

运行时链接有用的另一个场景是调试库,或者在运行时从多个ABI / API兼容的库中进行选择.我经常有一个图书馆,说“foo”和一个叫“foo_unstable”,并有一个测试应用程序在2之间切换并进行一些测试.

在linux下,要查看可执行程序链接到哪个库,请执行ldd命令并获取输出(on / bin / ls):

linux-vdso.so.1 =>  (0x00007fff139ff000)
librt.so.1 => /lib64/librt.so.1 (0x0000003c4f200000)
libselinux.so.1 => /lib64/libselinux.so.1 (0x0000003c4fa00000)
libcap.so.2 => /lib64/libcap.so.2 (0x0000003c53a00000)
libacl.so.1 => /lib64/libacl.so.1 (0x0000003c58e0000

操作系统将尝试在加载时加载库(.so文件).它可能已经有内存库.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读