运行时库与动态库

Zhi*_*Zhi 6 runtime dynamic-library

我已经搜索和阅读了一段时间,但仍然无法得到明确的答案:

运行时库和动态库有什么区别?

具体来说,我想了解以下几个方面:

运行时库在构建过程中如何工作?

为什么称为“运行时”?它总是加载到内存中还是什么?

pax*_*blo 5

就可执行文件访问库的方式而言,库通常分为三种类型:

  • 静止的;
  • 动态、自动加载;和
  • 动态,手动加载。

静态库往往在构建时链接到可执行文件,通常是通过链接器。因此,可执行文件永远“卡在”这些库中。

动态库是“后期绑定”的,它们往往在代码运行或即将运行时链接到您的可执行文件。这就是运行时的含义,在运行时完成的事情,与编译时静态链接形成对比)。

自动加载由操作系统(加载器)处理,您无需在代码中执行任何特定操作。在构建时,您已指定加载可执行文件时需要哪些库,但这些库到可执行文件的实际链接稍后发生。

这意味着您可以替换库来影响可执行文件的工作方式,而无需重新链接可执行文件(与静态链接不同)。

手动动态库是您从代码中显式加载库的库,通过诸如dlopen(打开库)和dlsym(获取该库中符号的地址)之类的调用。

您可能还想看看这个关于静态/动态区别的答案。


这涵盖了您可能遇到的库类型,但是,就您在评论中提供的链接而言,此处提到的“运行时库”似乎只是一个提供某些语言功能的库。

例如,C 运行时库是一个包含用于fopen()打开文件或strcpy()复制字符串等内容的库。虽然编译器了解核心语言(等等,if包括如何调用函数),但非核心语言功能以包含可调用函数的库的形式提供。while

从这个意义上说,询问动态库和运行时库之间的区别是不协调的,因为它们引用了不同的概念。运行时库可以静态或动态的形式提供。