C/C++运行时库和C/C++标准库的区别

62

你们能告诉我它们之间的区别吗?

顺便问一下,有没有叫做C++库或C库的东西?


2
详细信息请参阅:http://letrungthang.blogspot.com/2011/04/runtime-library-in-cc.html?utm_source=BP_recent 希望对您有所帮助。 - user712290
这只是一种命名约定。C或C++编译器必须搭载的ISO C库称为C运行时库。ISO C++标准库(STL)是一个仅限于C++的库,它使用了C运行时库的部分内容。STL库不是强制性的。 - Michaël Roy
8个回答

35
C++标准库C标准库是C++和C语言规定的库,供C++和C程序使用。这是这些术语的通用含义,我从未看到过其他定义。C++本身将其定义为:

C++标准库提供了一个可扩展的框架,并包含以下组件:语言支持、诊断、常用工具、字符串、区域设置、容器、迭代器、算法、数值和输入/输出。语言支持组件是C++语言的某些部分所必需的,例如内存分配(5.3.4、5.3.5)和异常处理(第15条款)。

C++运行时库C运行时库并不是同样常用的术语。有些人说运行时库是程序在运行时使用的部分(例如实现std::type_info的代码或支持信号处理程序的代码),与他们仅在编译时使用的东西(例如宏定义)不同。其他人认为运行时库是在加载时动态链接到程序中的库,与在编译时静态链接的库相对应,尽管这种用法非常罕见。对于这种情况,共享库或动态链接库是更好的术语。

C++库C库是非常广泛的术语。它们只表示一个库是用C++和/或C编写的。

以上不仅局限于C++和/或C,还有Python库以及Python 标准库

2
值得注意的是,GLIBC是在Linux上实现C标准库(printf等)的东西,它是一个在运行时加载的共享库(至少这是通常的做法)。这使得C标准库的错误修复/改进可以在整个系统范围内推出,而无需重新编译系统上的所有内容;更新只需放置一个不同的.so文件即可。 - bazza
@bazza 其他操作系统如Windows和macOS呢?这似乎是唯一有效的C(++)运行时库发布方式。 - Minh Nghĩa

26
根据https://en.wikibooks.org/wiki/C_Programming/Standard_libraries#Common_support_libraries,标准库和运行时库之间有一个非常重要的区别。虽然标准库定义了程序员(但至少在C语言中不是编程语言的(初始)规范的一部分)可以使用的函数,而运行时库包含实际上在给定平台上运行程序所必需的函数(并且是特定于平台/供应商的)。例如,printf()是C标准库的一部分,而程序启动(在许多情况下对程序员来说是不可见的)是在运行时库中实现的。因此,您可以编写一个不使用标准库的C程序,但您始终需要运行时库,否则,您的程序将无法执行。但是,说实话,这没有什么用,因为没有标准库的C程序不能进行输入/输出,因此它无法告诉您关于其印象深刻的结果的任何信息。导致混淆两者之间差异的原因是:
  1. 在所有情况下,都需要/使用运行时库,并且在(几乎)所有情况下,都使用标准库。此外,标准库可能依赖于运行时库,并且很可能由同一供应商开发。因此,区分并不清晰,在大多数情况下也不必要。
  2. Microsoft已经将C标准库和C运行时库合并在一起,只称其为C运行时库。

14

C++标准库指的是一个符合最低标准的编译器/工具集应该拥有的标准库。C++运行时库是与工具集一起提供标准库功能和可能一些编译器内部需要的东西的库。实际上,这些术语通常可以互换使用。


所谓标准库是指由C++委员会定义的标准,而运行时库则是该标准的实现? - Fijoy Vadakkumpadan
1
运行时比标准库范围更广,包括许多针对特定操作系统服务的系统调用。这些术语不应互换使用。 - 8znr

11

介绍

C/C++标准库是满足ISO C/C++标准所需的所有功能集的任何实现。(维基百科对C++标准库的定义)

运行时库是一组通常以SDK形式提供的功能实现,需要安装或静态链接到使用该SDK的程序中,以便其具备使用该SDK所需的全部功能。因此,运行时库通常与使用的SDK和编译器版本严格相关。(维基百科对通用运行时库的定义)

C/C++运行时库

因此,C/C++运行时库必须包含执行标准库所需的所有功能(特定标准库实现的仅作为头文件的功能可以排除,因为它们在程序自身中解决),再加上由特定实现的SDK提供的一组功能(同样,作为头文件提供的功能也可以排除)。

微软案例

MSVC140之前:最近的Microsoft VC++运行时库具有可安装的C/C++运行时版本(VCRedist),该版本适用于所有操作系统。

从MSVC140开始:从下一个MSVC140编译器开始,运行时库被分成两个部分:

  • UCRT(通用C运行时):随操作系统一起提供并与之相关,通过更新或操作系统映像进行分发
  • VCRedist:预计随使用的编译器而变化,并在不同操作系统版本中通用(像MSVC140之前一样管理)。

这是Microsoft C运行时参考文档链接。 这是Microsoft C运行时下载页面和安装说明链接


2

C++标准库由两个主要部分组成,即标准模板库(STL)和运行时库。STL仅在头文件中实现,而运行时库的实现包含头文件和二进制文件(即在Windows平台上的.lib和.dll文件)。


2
另一个方面,可能不完全是关于C/C++的情况,但根据维基百科:运行时库
在计算机编程中,运行时库(RTL)是一组低级例程,由编译器用来调用运行时环境的某些行为,通过将对运行时库的调用插入到已编译的可执行二进制文件中实现。
简而言之:
运行时库旨在供编译器使用,标准库旨在供程序员使用。

0

C++ 运行时库包含在 C++ 中提供的函数和对象,例如 cout、fstream 等。

C 运行时库包含 C 函数,例如 printf、scanf、fopen 等。


1
它们是标准库的一部分,而不是运行时库。 - in3xes

0

标准库是指C++标准文档中定义的一组特定的名称和头文件,运行时库是编译程序的一部分,但不包含在程序可执行文件中的二进制数据块,因为它们通常需要。

相反,这些功能模块被包含在主机上(尽管您可能需要要求客户安装更新的运行时库,如果他们有较旧的服务包),所以它们只在“运行时”才被包含到您的程序中。

参考链接:

http://msdn2.microsoft.com/en-us/library/cscc687y(VS.80).aspx

http://msdn2.microsoft.com/en-us/library/59ey50w6(VS.80).aspx


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接