Zhi*_*Zhi 6 runtime dynamic-library
我已经搜索和阅读了一段时间,但仍然无法得到明确的答案:
运行时库和动态库有什么区别?
具体来说,我想了解以下几个方面:
运行时库在构建过程中如何工作?
为什么称为“运行时”?它总是加载到内存中还是什么?
就可执行文件访问库的方式而言,库通常分为三种类型:
静态库往往在构建时链接到可执行文件,通常是通过链接器。因此,可执行文件永远“卡在”这些库中。
动态库是“后期绑定”的,它们往往在代码运行或即将运行时链接到您的可执行文件。这就是运行时的含义,在运行时完成的事情,与编译时静态链接形成对比)。
自动加载由操作系统(加载器)处理,您无需在代码中执行任何特定操作。在构建时,您已指定加载可执行文件时需要哪些库,但这些库到可执行文件的实际链接稍后发生。
这意味着您可以替换库来影响可执行文件的工作方式,而无需重新链接可执行文件(与静态链接不同)。
手动动态库是您从代码中显式加载库的库,通过诸如dlopen(打开库)和dlsym(获取该库中符号的地址)之类的调用。
您可能还想看看这个关于静态/动态区别的答案。
这涵盖了您可能遇到的库类型,但是,就您在评论中提供的链接而言,此处提到的“运行时库”似乎只是一个提供某些语言功能的库。
例如,C 运行时库是一个包含用于fopen()打开文件或strcpy()复制字符串等内容的库。虽然编译器了解核心语言(等等,if包括如何调用函数),但非核心语言功能以包含可调用函数的库的形式提供。while
从这个意义上说,询问动态库和运行时库之间的区别是不协调的,因为它们引用了不同的概念。运行时库可以静态或动态的形式提供。