2014-09-01 182 views
2

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

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

具体而言,我想知道以下几个方面:

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

它为什么叫做“运行时”?它是否总是被加载到内存中?

+0

[静态库和共享库之间的差异?](http://stackoverflow.com/questions/2649334/difference-between-static-and-shared-libraries) – Abhinav 2016-08-31 00:55:41

回答

2

通常有类型的图书馆来讲可执行如何访问它们:

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

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

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

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

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

手动动态库是您从代码中明确加载库的位置,可调用诸如dlopen(打开库)和dlsym(以获取该库中符号的地址)。

您可能还想看看this answer,关于静态/动态的区别。


覆盖类型你很可能会遇到,但是,在你在注释中提供的链接而言库,它出现在“运行时库”,这里被称为是一个简单的提供一些语言功能的库。

例如,C运行时库是一个库,其中包含用于打开文件的fopen()或用于复制字符串的strcpy()。尽管编译器理解核心语言(if,while等,包括如何调用函数),但非核心语言功能是作为包含可调用函数的库提供的。从这个意义上说,动态库和运行时库之间的差异是不协调的,因为它们涉及不同的概念。运行时库可以提供为静态的动态。

+0

我也从来没有听说过它。但是[这里](http://en.wikipedia.org/wiki/Runtime_library)是。 – Zhi 2014-09-01 02:52:26

+0

我还在http://www.openmp.org/wp-content/uploads/omp-hands-on-SC08.pdf找到这里的术语:第7页。不确定这是什么意思“运行时库” – ransh 2017-03-27 10:54:29