MinGW是如何实现C++;图书馆支持? 根据我的观察,MinGW使用C++的强> MMSCRT < /强>,C++使用强> LBSTDc++ + >

MinGW是如何实现C++;图书馆支持? 根据我的观察,MinGW使用C++的强> MMSCRT < /强>,C++使用强> LBSTDc++ + >,c++,windows,mingw,libstdc++,msvcrt,C++,Windows,Mingw,Libstdc++,Msvcrt,如果是这样的话,他们如何合作?而且,为什么不统一C和C++支持,无论 MsCRT >强> MsVCPRT < /强>或 GLUB +>强> LBSTDC++>P/> 我认为MSVCRT和libstdc++之间的混合听起来很可怕。那明哥为什么还选择这个 链接: 下面是我的观察,如果你能回答这个问题,就跳过它吧 为了编译本机窗口的代码(仅使用Win32 API), MinGW使用MSVCRT作为底层C运行时库(提供Win32 API), 为了连接标准C调用和Win32 API调用,我

如果是这样的话,他们如何合作?而且,为什么不统一C和C++支持,无论<强> MsCRT <强> >强> MsVCPRT < /强>或<强> GLUB<强> +>强> LBSTDC++>P/> 我认为MSVCRTlibstdc++之间的混合听起来很可怕。那明哥为什么还选择这个

链接:


下面是我的观察,如果你能回答这个问题,就跳过它吧

为了编译本机窗口的代码(仅使用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.
 */
在该文件中,您会发现许多
\u CRTIMP
,这意味着实际上它将转换为Win32 API调用

但是对于C++部分来说,它是很有联系的。 MinGW使用LISSTDC + +实现C++支持。p> < >我检查C++头文件,如<代码> IoSturi,它有这样的横幅

// 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.
当然,没有更多的
\u CRTIMP
或任何MS样式符号。

因此,MinGW已经使libstdc++基于MSVCRT工作

这是我的理解,请纠正我。

C库是指比C++库更多的内容。 C库是从依赖于平台的

系统调用
到独立于平台的
C调用
的桥梁

C++库从独立于平台的
C调用开始,然后添加面向对象的特性,使其更易于使用

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

因此,C++库是基于C库的,所以它是平台无关的。因此,只要使用

libstdc++
中的代码,它就会自动在Windows上工作。它还解释了为什么
libstdc++
可以基于
MSVCRT
运行


<> P>现在,事情变得容易多了,因为 LBSTDC++< /COD>提供了对最新C++标准的更好支持,MinGW选择了.< /P>,因为C库中满是SysCalrar包装,这些SysCurice是Linux / HURD依赖的。C++库,另一方面是相当多的用户空间的东西(模数支持),并且可以在任何合理的C上生存。lib@SeverinPappadeux你提醒了我!我甚至忘记了这样一个基本事实。gcc不太可能与
msvcprt.dll
@severinpapadeux兼容:这看起来像是我的答案!