我一直在寻找和阅读了一段时间,但仍然无法得到干净的答案:运行库和动态库
什么是运行时库和动态库之间的区别?
具体而言,我想知道以下几个方面:
如何在建设过程中运行时库的工作?
它为什么叫做“运行时”?它是否总是被加载到内存中?
我一直在寻找和阅读了一段时间,但仍然无法得到干净的答案:运行库和动态库
什么是运行时库和动态库之间的区别?
具体而言,我想知道以下几个方面:
如何在建设过程中运行时库的工作?
它为什么叫做“运行时”?它是否总是被加载到内存中?
通常有类型的图书馆来讲可执行如何访问它们:
静态库往往在构建时链接到可执行文件,通常由链接器。因此可执行文件永远与这些库“卡在一起”。
动态库是“后期绑定”的,它们往往在代码运行或即将运行时与您的可执行文件链接。这就是运行时意味着什么,在运行时完成的,与编译时静态链接相对比)。
自动加载一个由操作系统(加载程序)处理,而无需在代码中执行任何特定操作。在构建时,您已经指定了在可执行文件加载时需要什么库,但是这些库与可执行文件的实际链接稍后会发生。
这意味着您可以替换库以影响您的可执行文件的工作方式,不需要重新链接可执行文件(与静态链接不同)。
手动动态库是您从代码中明确加载库的位置,可调用诸如dlopen
(打开库)和dlsym
(以获取该库中符号的地址)。
您可能还想看看this answer,关于静态/动态的区别。
覆盖类型你很可能会遇到,但是,在你在注释中提供的链接而言库,它出现在“运行时库”,这里被称为是一个简单的提供一些语言功能的库。
例如,C运行时库是一个库,其中包含用于打开文件的fopen()
或用于复制字符串的strcpy()
。尽管编译器理解核心语言(if
,while
等,包括如何调用函数),但非核心语言功能是作为包含可调用函数的库提供的。从这个意义上说,动态库和运行时库之间的差异是不协调的,因为它们涉及不同的概念。运行时库可以提供为静态的或动态。
[静态库和共享库之间的差异?](http://stackoverflow.com/questions/2649334/difference-between-static-and-shared-libraries) – Abhinav 2016-08-31 00:55:41