彻底搞懂动态库、静态库、运行时库、引入库之间的区别
原创动态库、静态库、运行时库、引入库之间的区别
在软件开发过程中,库(Library)是代码复用的基础,它允许开发者将通用的功能封装起来,供其他程序或模块调用。在C/C++等编译型语言中,库通常分为动态库、静态库、运行时库和引入库等几种类型。下面将详细介绍这几种库的区别。
1. 动态库(DLL)
动态库(Dynamic Link Library),也称为DLL(Dynamic Link Library),是一种在程序运行时被动态加载的库。它允许程序在运行时链接到库,从而在需要时加载和卸载库,减成本时间了程序的灵活性和可移植性。
动态库的特点如下:
- 动态链接:在程序运行时,操作系统基于需要将DLL加载到内存中,程序通过DLL提供的接口访问库中的功能。
- 版本兼容:动态库可以与不同的程序版本共存,不同版本的程序可以调用不同版本的动态库。
- 资源节省:动态库在运行时才加载,节省了内存和磁盘空间。
- 平安性:动态库可以防止程序直接访问其内部实现,减成本时间了平安性。
以下是一个简洁的C++动态库示例:
// mylib.h
extern "C" {
__declspec(dllexport) void myFunction();
}
// mylib.cpp
#include "mylib.h"
void myFunction() {
// 实现函数
}
2. 静态库(LIB)
静态库(Static Library),也称为LIB,是一种在编译时将库代码编译到目标程序中的库。静态库在程序运行时不再需要,故而程序体积较大,但执行高效能较高。
静态库的特点如下:
- 编译链接:在编译程序时,编译器将静态库的代码编译到目标程序中,形成可执行文件。
- 版本依赖性:程序和静态库之间具有强依赖性关系,程序需要调用特定版本的静态库。
- 资源占用:静态库在程序运行时不需要加载,故而节省了内存和磁盘空间。
- 执行高效能:由于静态库在编译时已集成到程序中,故而执行高效能较高。
以下是一个简洁的C++静态库示例:
// mylib.h
void myFunction();
// mylib.cpp
#include "mylib.h"
void myFunction() {
// 实现函数
}
3. 运行时库
运行时库(Runtime Library)是一种在程序运行时提供拥护的库,它通常包含程序运行所需的函数和资源。运行时库分为两种:标准运行时库和第三方运行时库。
标准运行时库的特点如下:
- 系统提供:标准运行时库通常由操作系统提供,例如Windows平台下的MSVCRT库。
- 必需依赖性:程序运行时必须依赖性标准运行时库,否则程序无法正常运行。
- 功能多彩:标准运行时库提供多彩的函数和资源,满足程序运行需求。
第三方运行时库的特点如下:
- 第三方提供:第三方运行时库由第三方组织或公司提供,例如Qt、Boost等。
- 可选依赖性:程序可以选择使用第三方运行时库,以提供特定功能或优化性能。
- 功能扩展:第三方运行时库扩展了标准库的功能,提供了更多高级特性。
4. 引入库
引入库(Import Library)是一种用于描述动态库或静态库中函数和资源的文件。在Windows平台上,引入库通常以LIB为后缀名。
引入库的特点如下:
- 描述库:引入库描述了动态库或静态库中可用的函数和资源,方便程序调用。
- 兼容性:引入库确保程序可以正确地调用动态库或静态库中的函数。
- 版本控制:引入库可以记录库的版本信息,帮助程序识别和兼容不同版本的库。
以下是一个简洁的Windows引入库示例:
LIBRARY "mylib.lib"
EXPORTS
myFunction@1
总结
动态库