若文章对您有帮助,欢迎关注 程序员小迷 。助您在编程路上越走越好!
CRT运行时库
C标准规定例如输入输出函数、字符串函数、内存操作等接口,一般采用C运行时库实现。
微软的CRT
- 微软有两套CRT,早期的MSVCRT和Windows 10自带的UCRT. UCRT 支持基于 C 调用约定的稳定 ABI,且谨遵 ISO C99 标准(仅有少数例外)。 它将不再绑定到特定版本的编译器。
- 可参考:将代码升级到通用 CRT | Microsoft Learn
- https://learn.microsoft.com/zh-cn/cpp/porting/upgrade-your-code-to-the-universal-crt?view=msvc-170
- VS2015用UCRT代替MSVCRT, UCRT采用C++编写,而非之前的C语言。
macOS CRT
- Mac有些独特,它的CRT位于libSystem.dylib,为了管控版本,一般会链接到当前版本文件libSystem.B.dylib.
Linux CRT
- Ubuntu libc路径:/lib/x86_64-linux-gnu/libc.so.6.
什么是UCRT?
从Visual Studio 2015开始,CRT被重构成UCRT. UCRT已变成Windows 10组件的一部分。UCRT统一了微软对于不同子平台CRT不同的缺点,可以统一维护。
- 示例:C:\Program Files (x86)\Windows Kits\10\Lib\10.0.19041.0\ucrt\x86\ucrt.lib
如何查看libc源代码?
GNU libc
- Index of /pub/gnu/glibc
- http://ftp.gnu.org/pub/gnu/glibc/
- 源代码在线查看:2.39版本 Glibc source code (glibc-2.39) - Bootlin
- https://elixir.bootlin.com/glibc/glibc-2.39/source
macOS libc
- GitHub - apple-open-source-mirror/Libc
- https://github.com/apple-open-source-mirror/Libc
微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。
我是 程序员小迷 (致力于C、C++、C#、Android、iOS、Java、Kotlin、Objective-C、Swift、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。
若文章对您有帮助,欢迎关注 程序员小迷 。助您在编程路上越走越好!