c++ - 具体什么是运行时库?

标签 c++

<分区>

什么是运行时库?我读过this因此我对它的目的有一个体面的理解,但它是一个文件吗?它是否可以像标准库一样显式包含?

最佳答案

首先是概念:在目标平台上提供语言功能所需的代码。

即它是 strlen 的实现和 feclearexceptofstream::operator<<该语言提供的所有其他标准库函数。

它还可能包含“胶水代码”,例如确保在程序启动时使用正确的参数调用您的“main”,以及与目标操作系统的其他交互。


与许多概念一样,它具有不同的“物理”表现形式(与文件一样物理)。它们取决于语言的实现细节,但通常是:

  • 编译期间可用的头文件,其中包含内联实现(例如标准模板库)

  • 静态库(.obj 或 .lib)文件,包含已编译的函数,并在链接期间包含到您的可执行文件中。

  • 需要在执行期间可用的动态库(.dll 或 .so)文件

  • 创建可执行文件时“编译器或链接器执行的特殊操作”

典型的 C++ 程序可能会看到“以上所有内容”。

静态库通常由实现标准库函数的 C、C++ 或汇编代码创建,通常使用目标操作系统的功能(例如 Windows CreateFile 用于 fstreams)

动态库将这些静态库(大部分)打包为 .dll 或 .so。

使用动态库需要在目标平台上安装相应的运行时,但使用它们可以减少可执行文件的大小,并且您已经安装的应用程序可以从运行时更新中获益。 p>


如前所述,这依赖于实现。可能有任意数量的附加文件(例如数据文件、配置文件、调试符号、图标等)与运行时关联并包含在运行时中。

这里的另一个重要方面:语言提供了目标平台的抽象,抽象层在运行时实现。

关于c++ - 具体什么是运行时库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46707032/

相关文章:

c# - 命名管道适合这种情况吗?

c++ - 如何知道我们是在控制台还是窗口应用程序中?

c++ - 为什么在 C++23 中分配_at_least()?

c++ - 读取和写入 C++ vector 到文件

c++ - 为什么 boost locale 不提供字符级规则类型?

c++ - 检查值存在于 std::map - C++

c++ - dart 加密解密 AES 示例

c++ - 从 QSettings 读取自定义元类型数组

c++ - 迭代器取消引用

c++ - "set with class member as key"的最佳数据结构?