lib和dll的区别与使用

抛出几个概念:库、静态库、动态库、链接、静态链接、动态链接、显示链接、隐式链接。

什么是库

:库是写好的现有的、成熟的、可以复用的代码。库和可执行文件的区别是:库不是独立程序,它是向其他程序提供服务的代码。

有哪些库

       有两种库:静态库(.a、.lib)和动态库(.so、.dll),它们是两种共享程序代码的方式。

静态库(Static library/Staticlink library):lib包含代码本身,在编译时直接将代码加入到程序当中。在可执行文件中包含了库代码的一份完整拷贝。VS编译成功后,只会生成一个.lib文件。

动态库(Dynamiclibrary/Dynamic link library):lib包含了函数所在的dll和dll中函数位置的入口信息。代码由运行时加载在进程空间中的dll提供。VS编译成功后,会生成两个文件,.lib和.dll文件。

你可以简单的把DLL看成一种仓库,它提供给你一些可以直接拿来用的变量、函数或类。在仓库的发展史上经历了“无库-静态链接库-动态链接库”的时代。

静态库和动态库中的lib有什么区别

静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib中的指令都被直接包含在最终生成的EXE文件中了。但是若使用DLL,该DLL不必被包含在最终EXE文件中了。EXE文件执行时可以“动态”地引用和卸载这个与EXE独立的DLL文件。

       静态库中的lib:包含函数代码本身(包括函数的索引和实现),在编译时直接将代码加入程序当中。

       动态库中的lib:包含函数所在的dll文件和文件中函数位置的索引,函数实现的代码由运行时加载到进程空间中的dll提供。

       所以,lib是编译时用到的,dll是运行时用到的。如果要完成代码的编译,只需要lib,如果要使动态库链接的程序运行起来,只需要dll。

链接的方式

       链接器将一个个目标文件(或许还有若干程序库)链接在一起生成一个完整的可执行文件。

       静态链接:使用静态链接库,链接器从静态链接库lib获取所有被引用函数,并将库同代码一起放到可执行文件中。

       动态链接:使用动态链接库,允许可执行模块(.dll文件或者.exe文件)仅包含在运行时定位dll函数的可执行代码所需的信息。

       DLL的编制与具体的编程语言及编译器无关

只要遵循约定的DLL接口规范和调用方式,用各种语言编写的DLL都可以相互调用。譬如Windows提供的系统DLL(其中包括了Windows的API),在任何开发环境中都能被调用,不在乎是Visual Basic、Visual C++还是Delphi。

       动态链接库随处可见

我们在Windows目录下的system32文件夹中会看到kernel32.dll、user32.dll和gdi32.dll,windows的大多数API都包含在这些DLL中。Kernel32.dll中的函数主要处理内存管理和进程调度;user32.dll中的函数主要控制用户界面;gdi32.dll中的函数则负责图形方面的操作。

一般的程序员都用过类似MessageBox的函数,其实它就包含在user32.dll这个动态链接库中。由此可见DLL对我们来说其实并不陌生。

隐式链接与显示链接

       隐式链接与显示链接是怎么回事呢?其实这两种方式只是dll的两种不同的加载方式而已。

1.     导出函数

2.     导出类

3.     extern ”C”

4.     不需要头文件直接导入动态链接库

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值