Windows的.DLL文件详解

什么是DDL

大家都知道.exe文件的作用,当我们想打开游戏,却又在桌面找不到快捷图标,都会自己去到游戏文件夹里找一个exe文件,通常点开它,就可以打开游戏尽情的玩了。通常,我们都可以很快的在众多文件夹里找到这个exe文件。
其实这个.ddl 类似就是.exe 文件
DLL(Dynamic Link Library)文件为动态链接库文件,又称为"应用程序拓展",是软件文件类型。在windows中,许多应用程序并不是一个完整的可执行文件,它们被分割为一些相对独立的动态链接库,即DLL文件,放置于系统之中。当我们执行某个程序时,相应的DLL文件就会被调用。一个程序可以使用多个DLL文件,一个DLL文件也可以被多个程序使用,因此DLL文件又被称为共享DLL文件

好处

减少yong余的代码,减小进入程序的时间,同时又具有共享性,多个程序调用相同函数的函数时就可以从ddl中取出,调用,减少代码量,减少内存消耗,促进代码重用和内存的有效使用。

类似

windows下的.ddl文件与Linux里的.so文件性质相同,都是属于动态链接库,优点很多:

  • 节省内存和磁盘空间,因为动态库在内存中只保存一份,便可供多个进程或程序使用;
  • 模块化编程,方便协作
  • 使用动态加载DLL和SO文件时,便于模块升级,无需重新编译或链接整个程序,只升级指定部分就行,例如和平静音中每次的地图更新。

动态库(.dll)与静态库(.lib)

windows下的静态库生成的是.lib文件,其中包含有函数与数据,通过链接整合到程序里。
动态库.ddl则生成并导出一个也是.lib文件(动态lib文件),该文件相当于一个h文件。

动态库的使用方法
1、将动态库生成并导出的.lib文件链接到可执行文件中去。
2、在程序运行过程中及时的将需要的库加载到内存中,通过相应的Api拿到需要使用的动态库函数接口地址,使用函数指针的方式使用,使用完后卸载动态库。

Linux的共享库:

Linux的共享库与windows的动态库本质相同,特别是在动态加载时。差异主要体现在Linux的共享库产生.so文件时不会同时导出一个类似.lib的文件。

如果要用动态链接的方法,则需要将.so文件拿来链接时使用,不过它不会真的将该文件链接进最终的可执行文件。它只是记录下依赖该.so文件,并将引用于该.so的函数等符号记录到需要重定位的符号列表中[列表中包含了各个函数的相对地址],在程序加载到内存空间时,类似windows中,也是将确定的.so首地址与函数相对地址的和用来替换在程序中函数调用的地址指针[程序编译链接后,函数调用处均为地址跳转]。

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值