【问题标题】:What are the msvcp140_1.dll and msvcp140_2.dll files in the Microsoft C runtime?Microsoft C 运行时中的 msvcp140_1.dll 和 msvcp140_2.dll 文件是什么?
【发布时间】:2020-05-25 10:37:13
【问题描述】:

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

msvcp140.dll
msvcp140_1.dll
msvcp140_2.dll

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

msvcp140_1.dllmsvcp140_2.dll 文件的用途是什么?

【问题讨论】:

  • C++,而不是 C。五年前,Microsoft 发布了 msvcp140.dll,并承诺保持它与未来版本的二进制兼容。这是一个非常受欢迎和受欢迎的承诺,但 C++ 委员会并没有停止添加功能。 msvcp140_1 负责 operator new(size_t, align_val_t),msvcp140_2 涵盖 cmath 中添加的特殊数学函数。

标签: c msvcrt


【解决方案1】:

这些文件实际上是 C++ 标准库实现(请参阅它们名称中的 p)。来自CRT Library Features | Microsoft Docs 上的C++ Standard Library 部分:

当您构建项目的发布版本时,基本的 C 语言之一 运行时库(libcmt.lib、msvcmrt.lib、msvcrt.lib)由 默认值,取决于您选择的编译器选项(多线程, DLL,/clr)。如果您在代码中包含 C++ Standard Library header files 之一,则 C++ 标准库将链接到 在编译时由 Visual C++ 自动生成。例如:

#include <ios>

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

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

# msvcp140_1.dll (the memory_resource satellite)

# msvcp140_2.dll (the special math satellite)

但是the source filenames 本身已经具有描述性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-03
    相关资源
    最近更新 更多