MinGW是如何实现C++图书馆支持的

How did MinGW implement C++ Library support?

本文关键字:C++ 图书馆 支持 实现 何实现 MinGW      更新时间:2023-10-16

根据我的观察,MinGW使用MSVCRT表示C,libstdc++用于C++。

如果是这样,他们如何合作?而且,为什么不统一 C 和 C++ 支持,无论是 MSVCRT + MSVCPRT 还是 glib + libstdc++

我认为MSVCRTlibstdc++之间的混合听起来很可怕。那么为什么MinGW仍然选择这个呢?

链接:

  • C99 |明广
  • 明广 |明广
  • CRT 库功能
  • 程序将默认的 C 和C++库的说明使用视觉C++生成时的链接

以下是我的观察,如果您可以回答问题,请跳过它。

为了编译本机Windows的代码(仅使用Win32 API),
MinGW使用MSVCRT作为底层C运行时库(提供Win32 API),
并从头开始构建桥接层,以连接标准 C 调用和 Win32 API 调用。

我在 MinGW 中检查 C 头文件,例如stdio.h它有一个这样的横幅。

/**
 * This file has no copyright assigned and is placed in the Public Domain.
 * This file is part of the mingw-w64 runtime package.
 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
 */

在文件中,您会发现很多_CRTIMP,这意味着实际上它将转换为Win32 API调用。

但对于C++零件,它是相当有线的。
似乎MinGW使用libstdc++来实现C++支持。

我检查了像iostream这样的C++头文件,它有一个这样的横幅

// Standard iostream objects -*- C++ -*-
// Copyright (C) 1997-2014 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library.  This library is free
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
// Free Software Foundation; either version 3, or (at your option)
// any later version.

当然,不再有_CRTIMP或任何MS风格的符号。
所以,MinGW已经使libstdc++基于MSVCRT工作!

这是我

的理解,请修复我。

C 库的意义远不止C++库。

C 库是从平台依赖system calls到平台独立C calls的桥梁。

C++库从独立于平台C calls开始,然后添加面向对象的功能,使其更易于使用。

所以为什么不使用glibc的原因不仅仅是GPL许可证问题,而是因为C库需要system calls并与操作系统通信。因此,在大多数情况下,它与操作系统一起提供,并且将是平台上唯一可用的C库。

因此,由于C++库基于 C 库,因此它是独立于平台的。因此,只需使用libstdc++中的代码,它就会自发地在Windows上运行。它还解释了为什么libstdc++可以基于MSVCRT运行。

现在,事情变得容易多了,因为libstdc++为最新的C++标准提供更好的支持,MinGW选择了它。