首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >运行库与动态库

运行库与动态库
EN

Stack Overflow用户
提问于 2014-09-01 02:21:52
回答 1查看 3.8K关注 0票数 5

我已经搜索和阅读了一段时间,但仍然无法得到清晰的答案:

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

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

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

为什么它被称为“运行时”?它总是装在内存里还是什么的?

EN

回答 1

Stack Overflow用户

发布于 2014-09-01 02:33:14

在可执行文件访问方式方面,通常有三种类型的库:

  • 静态的;
  • 动态,自动加载;以及
  • 动态手动装载。

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

动态库是“后期绑定”,它们倾向于在代码运行或即将运行时链接到您的可执行文件。这就是运行时的意思,在运行时所做的事情,与编译时静态链接形成对比)。

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

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

手动动态库是从代码中显式加载库的库,调用包括dlopen (用于打开库)和dlsym (以获取该库中符号的地址)。

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

它涵盖了您可能会遇到的库类型,但是,就您在注释中提供的链接而言,这里引用的“运行时库”似乎只是一个提供了一些语言特性的库。

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

在这个意义上,询问动态库和运行时库之间的区别是不一致的,因为它们引用了不同的概念。运行时库可以以静态或动态形式提供。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25598098

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档