精品文档---下载后可任意编辑一,动态链接库的基本概念1
DLL(Dynamic Linker Library)的概念可以把 DLL 看做是一个仓库,它提供了一些可以直接拿来用的变量,函数或者类(但是不建议从 DLL 中猎取变量),在历史的进展中,仓库经历了从“无库 - 静态链接库 - 动态链接库”的时代
静态链接库(
lib)和动态链接库(
dll)都是共享代码的方式
假如采纳了静态链接库,则无论你愿不同意 lib中的代码指令都被直接包含进了最终生成的
exe 程序中
但若是使用了动态链接库,该 DLL 则不会被包含进
exe 程序中,当
exe 程序执行的时候,再“动态”的来引用或者卸载 DLL
DLL 文件可以被其他的语言所调用,例如 C#或者 Java 等
譬如 Window 下的存在大量的 DLL 文件,当我们用 Java 编写 Swing 界面或者其他语言如 C#等都是可以进行调用的
我们在 Window 系统下面的 system32 文件夹中会看到 kernel
dll、user32
dll 和gdi32
Window 系统下的大多数 API 都是包含在这些 DLL 中
kernel
dll 中的函数主要处理内存管理和进程的调度
user32
dll 中的函数主要控制用户界面
gdi32
dll 中的函数主要负责图形方面的操作
从上图中可以看出,静态链接库和动态链接库都是在程序的“链接”阶段进行调用的,但是静态库和动态库的链接方式是不一样的
静态库的链接是把
lib 的代码指令全部链接到最终生成的 EXE 程序中
动态链接库的链接是只链接
dll 文件的地址引用,因此生成的 EXE 程序中不包含
dll 的代码指令,所以
dll 生成的可执行程序要比
lib 生成的小很多,根据实验,一个仅包含 printf 的函数的生成程序,在静态链接库