MinGW是如何实现C++图书馆支持的
How did MinGW implement C++ Library support?
根据我的观察,MinGW使用MSVCRT表示C,libstdc++用于C++。
如果是这样,他们如何合作?而且,为什么不统一 C 和 C++ 支持,无论是 MSVCRT + MSVCPRT 还是 glib + libstdc++。
我认为MSVCRT和libstdc++之间的混合听起来很可怕。那么为什么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选择了它。
- 个人图书馆,数字正数或负数
- 像 POCO 这样的C++图书馆如何访问网络?
- 与第三方公共图书馆/代码接口
- Abseil和CMake在图书馆
- 如何制作跨平台图书馆
- MinGW在Cygwin上.关于链接GNU科学图书馆的一些问题
- 与libc相比,Gnu科学图书馆的性能较差
- 图书馆时间.H与C++
- C++的"皮条客我的图书馆"
- 制作不认识我的图书馆
- 谷歌丁克图书馆大楼C++
- 将Thirt-Party共享图书馆与Python Ctypes集成
- Visual Studio 2012静态图书馆与Visual Studio 2017
- Visual Studio 2017无法通过图书馆构建
- 如何获取当前图书馆路径
- 分配但不使用分配器的标准图书馆设施
- 带有Visual Studio的第三方图书馆
- Jacobi SVD的Eigen图书馆
- 在编译像Pillow之类的图书馆时,如何更改Python dll的名称
- 波科C++图书馆:"Not found: mysql"