彻底搞懂动态库、静态库、运行时库、引入库之间的区别

原创
ithorizon 6个月前 (10-17) 阅读数 40 #Linux

动态库、静态库、运行时库、引入库之间的区别

在软件开发过程中,库(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

总结

动态库

本文由IT视界版权所有,禁止未经同意的情况下转发

文章标签: Linux


热门