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

将程序加载到内存中时,加载时动态链接和运行时动态链接有什么区别?
加载时间链接是指当操作系统将可执行文件/库加载到内存时,由可执行文件(或另一个库)引用的库中的符号被处理.

运行时链接是指当您使用操作系统提供的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文件).它可能已经有内存库.

相关文章

Windows2012R2备用域控搭建 前置操作 域控主域控的主dns:自...
主域控角色迁移和夺取(转载) 转载自:http://yupeizhi.blo...
Windows2012R2 NTP时间同步 Windows2012R2里没有了internet时...
Windows注册表操作基础代码 Windows下对注册表进行操作使用的...
黑客常用WinAPI函数整理之前的博客写了很多关于Windows编程的...
一个简单的Windows Socket可复用框架说起网络编程,无非是建...