C/C++运行时库的来源是什么?

3

我最近了解到,在Windows系统中,C/C++运行时有两个部分。第一个是VC运行时,另一个是通用C运行时。据我所知,通用C运行时是操作系统的一部分。

问题1:那么通用C运行时是否默认随着操作系统安装而来?或者说,通用C运行时与Windows SDK有关,即Windows SDK安装提供UCRT吗?

问题2:如果UCRT是操作系统的一部分,那么VC运行时由什么提供?

我也了解到,平台工具集提供编译器、链接器和标准库。

问题3:所以平台工具集与C/C++运行时(分为两个部分)无关?我们可以说,在Windows操作系统上,平台工具集和C/C++运行时不作为单个单位提供吗?

请澄清这些问题。

2个回答

2

Universal C runtime是Windows 10操作系统自带的(安装操作系统时就已经安装了)。在旧版Windows(从Vista到8.1)上,它通过Windows Update分发。也可以随应用程序一起本地部署。

如果你的应用程序支持比Windows 10旧的操作系统,你需要考虑如何分发它。你可以将它与应用程序一起包含在内(这是最常见的解决方案),或者要求用户安装Windows Update。

你可以在这里阅读更多相关信息:https://learn.microsoft.com/en-us/cpp/windows/universal-crt-deployment?view=vs-2019

VC Runtime有两种供应方式:通过Visual C++可再发行软件包安装程序提供,或者与你的应用程序一起本地部署。如果你与应用程序一起提供安装程序,你可以让你的安装程序也安装VC Runtime软件包。如果你提供的软件没有被安装,你将不得不将VC Runtime DLL文件放置在应用程序可执行文件旁边。你可以在这里阅读更多关于VC Runtime的部署信息:https://learn.microsoft.com/en-us/cpp/windows/redistributing-visual-cpp-files?view=vs-2019

此外,我读到平台工具集提供编译器、链接器和标准库。

这并不完全正确。它提供了标准C++库和运行时(也称为VC Runtime)。标准C库和运行时来自于Universal C Runtime。


1
“通用 C 运行时”最多也只能算是奇怪的术语。
C 编译器附带了一个标准库,你需要将其链接到你的代码中。标准库提供了 C 标准所需的所有函数。实现这些函数的方式由库的实现者决定。
操作系统提供了对程序有用的服务:内存管理、文件系统、显示屏、键盘输入、鼠标等等。它有自己的接口,标准库中的代码会根据需要使用它。
不同的操作系统提供这些服务的方式不同,因此标准库必须为不同的操作系统编写不同的代码。但是调用操作系统的方法并不一定是用 C 写的,这就是为什么“通用 C 运行时”并不是很合适的原因。例如,在 MSDOS 的早期,调用操作系统意味着在处理器寄存器中设置一些值,然后生成软件中断。这通常不是 C 代码,尽管一些运行时库提供了一个代码层,以便您无需编写自己的汇编代码即可完成这个过程。

谢谢您的回答。但从我的提问背景来看,我不认为它回答了我的问题。 - user13003546
1
“通用 C 运行时”是微软的一个库的实际名称。它在英语中并不是真正的“通用”意义上的词汇。 - Ben Voigt
@BenVoigt -- 谢谢,我不知道那个。听起来它在微软的意义上是“通用”的。 - Pete Becker
它是“通用的”,因为从VS 15开始,所有的VS版本都使用相同版本的运行时。在VS15之前,这并不是真的。 - drlolly

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