当前位置: 首页 > article >正文

UCRT 和 MSVC 的区别(Windows 平台上 C/C++ 开发相关)

UCRTMSVC 是与 Windows 平台上 C/C++ 开发相关的两个重要概念,它们都属于 Microsoft 的开发工具链的一部分。下面详细解释它们的含义、区别以及用途。
在这里插入图片描述


一、UCRT(Universal C Runtime)

1. 含义:

UCRT(Universal C Runtime) 是微软提供的 C 标准库实现,它是 Windows 操作系统的一部分。从 Windows 10 开始,UCRT 被集成进操作系统中,并通过 Windows Update 进行更新。

2. 特点:

  • UCRT 提供了标准 C 库函数,如 printf, malloc, fopen 等。
  • 它是跨平台兼容的,支持多种架构(x86, x64, ARM)和多个 Windows 版本。
  • 从 Visual Studio 2015 开始,所有基于 MSVC 编译器构建的应用程序默认链接到 UCRT。
  • UCRT 是“系统级”的运行时库,作为 Windows 的一部分进行维护。

3. 位置:

  • 在 Windows 系统中,UCRT 的 DLL 文件通常为:ucrtbase.dll
  • 静态库文件位于 Visual Studio 或 Windows SDK 的安装目录下。

二、MSVC(Microsoft Visual C++)

1. 含义:

MSVC(Microsoft Visual C++) 是微软的 C/C++ 编译器工具链,包含编译器 (cl.exe)、链接器 (link.exe)、调试器等工具。

2. 功能:

  • 将 C/C++ 源代码编译成机器码。
  • 支持现代 C++ 标准(如 C++17、C++20)。
  • 提供 C++ 标准库的实现(包括 STL:vector、map、string 等容器和算法)。
  • 可以选择使用静态或动态链接的运行时库(MT/MTd、MD/MDd)。

3. 与 UCRT 的关系:

  • MSVC 使用 UCRT 作为其 C 标准库的底层实现。
  • 即:MSVC 的 C++ 标准库依赖于 UCRT 中的 C 函数支持。
  • 所以,MSVC + UCRT = Windows 上完整的 C/C++ 开发环境。

三、运行时库选项(Runtime Library)

在 Visual Studio 中,项目属性里可以设置运行时库:

选项含义
/MT使用多线程静态 CRT(不推荐用于新项目)
/MTd调试版的静态 CRT
/MD使用多线程动态 CRT(默认,使用 UCRT 的 DLL)
/MDd调试版的动态 CRT

推荐使用 /MD,这样程序会使用系统中的 UCRT DLL(例如 ucrtbase.dll),便于统一版本和节省部署体积。


四、VC++ 运行库(Visual C++ Redistributable)

当你在一台没有安装 Visual Studio 的电脑上运行一个使用 MSVC 编译的程序时,可能需要安装 VC++ 运行库(VC Redist)

  • 它包含了 MSVC 的 C++ 运行时库(如 vcruntime140.dll, msvcp140.dll)以及 UCRT 的 DLL(如 ucrtbase.dll)。
  • 不同版本的 VC Redist 对应不同的 MSVC 工具集版本(如 VS2015、VS2019、VS2022)。

五、总结对比

特性UCRTMSVC
全称Universal C RuntimeMicrosoft Visual C++
类型C 标准库实现C/C++ 编译器工具链
是否编译器
是否运行时库
是否系统组件✅(从 Win10 开始)❌(需安装)
主要 DLLucrtbase.dllvcruntime140.dll, msvcp140.dll
是否提供 C++ 支持✅(含 STL)
是否可单独安装✅(通过 VC Redist)✅(通过 VS 或 Build Tools)

六、常见问题解答

Q: 我的程序提示缺少 ucrtbase.dll

A: 说明目标系统缺少 VC++ 运行库,请安装最新版 VC++ Redistributable。

Q: UCRT 是不是就是 CRT?

A: 是的,UCRT 是 Microsoft 新一代的 CRT(C Runtime)。旧版 CRT 是 msvcrt.dll,现在已被 UCRT 替代。

Q: UCRT 和 MSVC 是不是必须一起用?

A: 基本上是的。MSVC 默认使用 UCRT 作为其 C 标准库实现。你可以理解为:MSVC 是“大脑”,UCRT 是“基础库”。

http://www.lryc.cn/news/2402161.html

相关文章:

  • rabbitmq Fanout交换机简介
  • 【机器学习】集成学习与梯度提升决策树
  • Palo Alto Networks Expedition存在命令注入漏洞(CVE-2025-0107)
  • WebFuture:Ubuntu 系统上在线安装.NET Core 8 的步骤
  • JAVA-springboot JUnit单元测试
  • hot100 -- 6.矩阵系列
  • PyCharm中运行.py脚本程序
  • 吴恩达MCP课程(5):research_server_prompt_resource.py
  • [论文阅读] 人工智能+项目管理 | 当 PMBOK 遇见 AI:传统项目管理框架的破局之路
  • Gateway 搭建
  • pytorch基本运算-导数和f-string
  • impala中更改公网ip为内网ip
  • 5.RV1126-OPENCV 图形计算面积
  • 一键净化Excel数据:高性能Python脚本实现多核并行清理
  • 【Android基础回顾】一:Binder机制是什么?有什么用?
  • LeetCode 高频 SQL 50 题(基础版) 之 【高级查询和连接】· 上
  • 资产智慧管理安全监测中心
  • 从零开始的云计算——番外实战,iptables防火墙项目
  • 移动网页调试的多元路径:WebDebugX 与其他调试工具的组合使用策略
  • 【基于阿里云搭建数据仓库(离线)】IDEA导出Jar包(包括第三方依赖)
  • 【HarmonyOS 5】鸿蒙HarmonyOS —(cordova)研发方案详解
  • Linux程序运行日志总结
  • 【物联网-TCP/IP】
  • SAP ECC 与 SAP S/4HANA 技术架构全面对比
  • Halcon光度立体法
  • cocos3.X的oops框架oops-plugin-excel-to-json改进兼容多表单导出功能
  • Spring Boot + OpenAI 构建基于RAG的智能问答系统
  • 开源量子模拟引擎:Quantum ESPRESSO本地部署教程,第一性原理计算轻松入门!
  • 算法blog合集
  • 每日八股文6.3