首页 > 解决方案 > Microsoft C 运行时中的 msvcp140_1.dll 和 msvcp140_2.dll 文件是什么?

问题描述

我正在尝试将 C 库导入 Visual Studio 项目。该库附带以下文件:

msvcp140.dll
msvcp140_1.dll
msvcp140_2.dll

我知道这些是 Microsoft C 运行时 DLL 文件。但我想更多地了解这些文件的用途。我想知道我需要什么二进制文件以及包括它们在内的后果。

msvcp140_1.dllmsvcp140_2.dll文件的目的是什么?

标签: cmsvcrt

解决方案


这些文件实际上是 C++ 标准库实现(参见p它们的名称)。来自CRT 库功能C++ Standard Library部分| 微软文档

当您构建项目的发布版本时,默认情况下会链接基本 C 运行时库之一(libcmt.lib、msvcmrt.lib、msvcrt.lib),具体取决于您选择的编译器选项(多线程、DLL、/ cl)。如果在代码中包含C++ 标准库头文件之一,则C++ 标准库将在编译时由 Visual C++ 自动链接。例如:

#include <ios>

为了二进制兼容性,一个导入库可以指定多个 DLL 文件。版本更新可能会引入点库,即引入新库功能的单独 DLL。例如,Visual Studio 2017 版本 15.6 引入了 msvcp140_1.dll 以支持额外的标准库功能,而不会破坏 msvcp140.dll 支持的 ABI。Visual Studio 2017 版本 15.6 的工具集中包含的 msvcprt.lib 导入库支持这两个 DLL,并且此版本的 vcredist 安装这两个 DLL。一旦交付,点库具有固定的 ABI,并且永远不会依赖于以后的点库。

由于 Microsoft 的 C++ 标准库是开源的,您可以轻松查找这些附加功能是什么,例如,stl/CMakeLists.txt甚至描述文件:

# msvcp140_1.dll (the memory_resource satellite)

# msvcp140_2.dll (the special math satellite)

然而,源文件名本身已经是描述性的。


推荐阅读