MinGW是如何实现C ++库支持的?

时间:2015-01-15 05:33:46

标签: c++ windows mingw libstdc++ msvcrt

根据我的观察,MinGW对C使用 MSVCRT ,对C ++使用 libstdc ++

如果是这样,他们怎么能一起工作?而且,为什么不支持统一的C和C ++,无论 MSVCRT + MSVCPRT glib + libstdc ++

我认为 MSVCRT libstdc ++ 之间的混音听起来很糟糕。那为什么MinGW仍然选择这个呢?

链接:


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

为了编译本机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工作!

1 个答案:

答案 0 :(得分:0)

以下是我的理解,请修理我。

C库比C ++库意味着更多。

C库是从平台相关system calls到平台无关C calls的桥梁。

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

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

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

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