Windows 中的通用 C 运行时更新
在 https://winlibs.com/ 介绍到 C runtime 库时说:
Traditionally the MinGW-w64 compiler used MSVCRT as runtime library, which is available on all versions of Windows.
Since Windows 10 Universal C Runtime (UCRT) is available as an alternative to MSVCRT.
Universal C Runtime can also be installed on earlier versions of Windows (see: Update for Universal C Runtime in Windows).
Unless you are targetting older versions of Windows, UCRT as runtime library is the better choice, as it was written to better support recent Windows versions as well as provide better standards conformance (see also: Upgrade your code to the Universal CRT).
传统上,MinGW-w64编译器使用MSVCRT作为运行时库,该库在所有Windows版本上均可使用。然而,自Windows 10起,Universal C Runtime (UCRT)成为MSVCRT的一个可替代选项。UCRT不仅适用于Windows 10,也可安装在早期的Windows版本上,通过“Update for Universal C Runtime in Windows”更新获得。假如你的目标平台不是较老的Windows版本,选择UCRT作为运行时库更为优越,因为它旨在更好地支持最新Windows版本,并提供更佳的标准化符合性。因此,升级到Universal CRT对于优化代码以适应现代Windows环境和标准是非常推荐的。
现在 ucrt 作为windows 10 的一部分被包含在内,以前的版本需要下载软件包以获得支持。https://download.microsoft.com/download/C/5/D/C5D68AA1-F62E-422A-9084-4AD85CEB8D4D/WindowsUCRT.zip
Windows 10 Universal C Runtime (UCRT) 是Windows操作系统的一个核心组件,它是微软为支持符合ISO C99、C11以及POSIX标准的C语言运行时库而引入的。UCRT的设计目的是为了让开发者编写的基于C语言的应用程序能在不同的Windows版本间更稳定地运行,同时减少不同版本Windows SDK和Visual Studio之间的依赖冲突。
UCRT的特性与作用
-
标准化支持:UCRT实现了大量C标准库函数和POSIX兼容函数,确保应用程序能够在遵循现代C标准的同时运行。
-
分离编译器依赖:在UCRT引入之前,C++运行时库与编译器紧密绑定,这导致了升级和维护的复杂性。UCRT将其与特定版本的Visual C++编译器解耦,使得运行时库可以独立更新和维护。
-
统一运行时环境:UCRT为所有基于Windows的应用程序提供了一个统一的C运行时环境,无论是UWP应用、传统的桌面应用还是其他类型的Windows应用,都可以使用相同的运行时库,提高了兼容性和一致性。
-
通过Windows Update更新:UCRT作为Windows操作系统的一部分,可以通过Windows Update自动接收更新,这意味着用户无需单独安装或更新UCRT,从而降低了用户的维护负担。
-
减少部署复杂度:开发者不再需要随应用程序分发C运行时库,因为UCRT已经预装在大多数Windows 10系统中,简化了应用程序的部署流程。
-
兼容性与向后支持:虽然UCRT主要是为Windows 10设计的,但它也提供了向后兼容支持,比如为Windows 7 SP1及更高版本通过KB2999226这样的更新包提供了UCRT,使得旧系统也能运行依赖UCRT的应用程序。
安装与使用
UCRT通常是通过Windows Update自动安装的,对于开发者而言,在构建应用程序时,只需要确保链接到正确的库文件(如ucrt.lib)即可。如果在开发或运行应用程序时遇到缺少api-ms-win-crt-*.dll错误,通常意味着需要安装或更新UCRT。
结论
UCRT的引入标志着Windows平台在C语言支持方面的一大进步,它不仅简化了开发者的部署流程,还提升了最终用户的体验,通过持续的更新确保了系统安全性和稳定性。随着Windows系统的不断演进,UCRT将继续作为支撑现代C语言应用运行的重要基石。