我已经搜索和阅读了一段时间,但仍然无法得到清晰的答案:
运行库和动态库有什么区别?
具体来说,我想知道以下几个方面:
运行库在构建过程中是如何工作的?
为什么它被称为“运行时”?它总是装在内存里还是什么的?
发布于 2014-09-01 02:33:14
在可执行文件访问方式方面,通常有三种类型的库:
静态库通常通过链接器在构建时链接到可执行文件。因此,可执行文件将永远被这些库“卡住”。
动态库是“后期绑定”,它们倾向于在代码运行或即将运行时链接到您的可执行文件。这就是运行时的意思,在运行时所做的事情,与编译时静态链接形成对比)。
自动加载一个由操作系统(加载程序)处理,而不必在代码中采取任何特定的操作。在构建时,您已经指定了当可执行文件加载时需要哪些库,但是这些库与可执行文件的实际链接将在稍后发生。
这意味着您可以替换库以影响可执行文件的工作方式,而无需重新连接可执行文件(不像静态链接)。
手动动态库是从代码中显式加载库的库,调用包括dlopen (用于打开库)和dlsym (以获取该库中符号的地址)。
您可能还想看看this answer,关于静态/动态的区别。
它涵盖了您可能会遇到的库类型,但是,就您在注释中提供的链接而言,这里引用的“运行时库”似乎只是一个提供了一些语言特性的库。
例如,C运行时库是一个库,包含用于打开文件的fopen()或用于复制字符串的strcpy()。虽然编译器了解核心语言(if、while等,包括如何调用函数),但非核心语言特性作为包含可调用函数的库提供。
在这个意义上,询问动态库和运行时库之间的区别是不一致的,因为它们引用了不同的概念。运行时库可以以静态或动态形式提供。
https://stackoverflow.com/questions/25598098
复制相似问题