根据我的观察,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工作!
答案 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选择了它。