运行时库与动态库

时间:2014-09-01 02:21:52

标签: runtime dynamic-library

我一直在寻找和阅读一段时间,但仍然无法得到干净的答案:

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

具体来说,我想知道以下几个方面:

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

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

1 个答案:

答案 0 :(得分:2)

根据可执行文件访问它们的方式,通常有三种类型的库:

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

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

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

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

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

手动动态库是您通过代码显式加载库的方式,例如dlopen(打开库)和dlsym(以获取符号中的符号地址)库)。

您可能还想看一下静态/动态区别的this answer


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

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

从这个意义上讲,要求动态库和运行时库之间的区别是不协调的,因为它们指的是不同的概念。运行时库可以作为静态动态提供。