Согласно моим наблюдениям, MinGW использует MSVCRT для C и libstdC++ для C++.Как MinGW реализует поддержку библиотеки C++?
Если да, то как они могут работать вместе? И, почему не однородна C и C++ поддержка, независимо от MSVCRT + MSVCPRT или бойкий + libstdC++.
Я думаю, что между Mixin MSVCRT и libstdC++ звучит ужасно. Так почему MinGW все еще выбирает это?
Ссылки:
- C99 | MinGW
- MinGW | MinGW
- CRT Library Features
- Description of the default C and C++ libraries that a program will link with when built by using Visual C++
Ниже мое наблюдение, просто пропустите его, если вы могли бы Ответ на вопрос.
Для того, чтобы компилировать код для родной Windows (с использованием только API Win32),
MinGW использовать MSVCRT в качестве базовой библиотеки C во время выполнения (обеспечивать Win32 API),
и wirte мостового слоя с нуля для подключения стандартные вызовы C и вызовы API Win32.
Я проверяю файлы заголовков C в MinGW, 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
, что означает на самом деле было бы преобразовать в API вызовов Win32.
Но для деталей на С ++ он достаточно проводной.
Кажется, что MinGW использует libstdC++ для реализации поддержки C++.
проверить файлы заголовков C++ как iostream
, он имеет знамя, как этот
// 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 полна оболочек syscall, и эти системные вызовы зависят от Linux/Hurd. C++-библиотека, с другой стороны, в значительной степени связана с пользовательским пространством (modulo) и может жить на любой разумной C lib –
@SeverinPappadeux. Вы напоминаете мне! Я даже забыл такой базовый факт. – Eugene
Вряд ли gcc совместим с 'msvcprt.dll'. –