DLL和LIB |
您所在的位置:网站首页 › dll文件和lib文件 › DLL和LIB |
DLL 和 LIB
什么事 dll 和 lib 文件
动态链接库( Dynamic
Link
Library ,缩写为 DLL )是一个可以被其它应用程序共享的程序模块,其中封装了一些可以被共享的例程 和资源。动态链接库文件的扩展名一般是 dll ,也有可能是 drv 、 sys 和 fon ,它和可执行文件( exe )非常类似,区别在于 DLL 中虽然包含 了可执行代码却不能单独执行,而应由 Windows 应用程序直接或间接调用。
动态链接是相对于静态链接而言的。所谓静态链接是指把要调用的函数或者过程链接到可执行文件中,成为可执行文件的一部分。换句话 说,函数和过程的代码就在程序的 exe 文件中,该文件包含了运行时所需的全部代码。当多个程序都调用相同函数时,内存中就会存在这 个函数的多个拷贝,这样就浪费了宝贵的内存资源。而动态链接所调用的函数代码并没有被拷贝到应用程序的可执行文件中去,而是仅仅 在其中加入了所调用函数的描述信息(往往是一些重定位信息) 。仅当应用程序被装入内存开始运行时,在 Windows 的管理下,才在应用 程序与相应的 DLL 之间建立链接关系。 当要执行所调用 DLL 中的函数时,根据链接产生的重定位信息, Windows 才转去执行 DLL 中相应 的函数代码。
一般情况下,如果一个应用程序使用了动态链接库, Win32 系统保证内存中只有 DLL 的一份复制品,这是通过内存映射文件实现的。 DLL 首先被调入 Win32 系统的全局堆栈,然后映射到调用这个 DLL 的进程地址空间。在 Win32 系统中,每个进程拥有自己的 32 位线性地址空 间,如果一个 DLL 被多个进程调用,每个进程都会收到该 DLL 的一份映像。与 16 位 Windows 不同,在 Win32 中 DLL 可以看作是每个进 程自己的代码。
dll 和 lib 文件的区别和联系
.dll 是在你的程序运行的时候才连接的文件,因此它是一种比较小的可执行文件格式, .dll 还有其他的文件格式如 .ocx 等,所有的 .dll 文件 都是可执行。
.lib 是在你的程序编译连接的时候就连接的文件,因此你必须告知编译器连接的 lib 文件在那里。一般来说,与动态连接文件相对比, lib 文件也被称为是静态连接库。当你把代码编译成这几种格式的文件时,在以后他们就不可能再被更改。如果你想使用 lib 文件,就必须:
1
包含一个对应的头文件告知编译器 lib 文件里面的具体内容
2
设置 lib 文件允许编译器去查找已经编译好的二进制代码
如果你想从你的代码分离一个 dll 文件出来代替静态连接库,仍然需要一个 lib 文件。这个 lib 文件将被连接到程序告诉操作系统在运行的 时候你想用到什么 dll 文件,一般情况下, lib 文件里有相应的 dll 文件的名字和一个指明 dll 输出函数入口的顺序表。如果不想用 lib 文件 或者是没有 lib 文件, 可以用 WIN32
API 函数 LoadLibrary 、 GetProcAddress 。 这就是问什么编译出 dll 后 VS 又给出了个 lib 文件的原因?
(1)lib 是编译时需要的, dll 是运行时需要的。
如果要完成源代码的编译,有 lib 就够了。
如果也使动态连接的程序运行起来,有 dll 就够了。
在开发和调试阶段,当然最好都有。
(2) 一般的动态库程序有 lib 文件和 dll 文件。 lib 文件是必须在编译期就连接到应用程序中的, 而 dll 文件是运行期才会被调用的。 如果有 dll 文件,那么对应的 lib 文件一般是一些索引信息,具体的实现在 dll 文件中。如果只有 lib 文件,那么这个 lib 文件是静态编译出来的,索引 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |