2015-01-15 2 views
3

Согласно моим наблюдениям, MinGW использует MSVCRT для C и libstdC++ для C++.Как MinGW реализует поддержку библиотеки C++?

Если да, то как они могут работать вместе? И, почему не однородна C и C++ поддержка, независимо от MSVCRT + MSVCPRT или бойкий + libstdC++.

Я думаю, что между Mixin MSVCRT и libstdC++ звучит ужасно. Так почему MinGW все еще выбирает это?

Ссылки:


Ниже мое наблюдение, просто пропустите его, если вы могли бы Ответ на вопрос.

Для того, чтобы компилировать код для родной 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!

+4

Потому что библиотека C полна оболочек syscall, и эти системные вызовы зависят от Linux/Hurd. C++-библиотека, с другой стороны, в значительной степени связана с пользовательским пространством (modulo ) и может жить на любой разумной C lib –

+0

@SeverinPappadeux. Вы напоминаете мне! Я даже забыл такой базовый факт. – Eugene

+0

Вряд ли gcc совместим с 'msvcprt.dll'. –

ответ

0

Это мое понимание, , пожалуйста, исправьте меня.

C Library - это намного больше, чем библиотека C++.

C Библиотека является мостом от зависимой от платформы system calls до независимой от платформы C calls.

Библиотеки C++ начинаются с независимой от платформы C calls, а затем добавляют объектно-ориентированные функции и делают ее намного проще в использовании.

Поэтому причина, по которой не использовать glibc, намного больше, чем проблема лицензии GPL, это потому, что C Library необходимо сделать system calls и установить связь с ОС. Поэтому в большинстве случаев он поставляется вместе с ОС и будет единственной C-библиотекой, доступной на платформе.

Поэтому, поскольку библиотека C++ основана на библиотеке C, поэтому она не зависит от платформы. Так что просто используйте код от libstdc++ и спонтанно он работает на Windows. Это также объясняет, почему libstdc++ может работать на основе MSVCRT.

Теперь все становится намного проще, потому что libstdc++ обеспечивает лучшую поддержку для новейшего стандарта C++, MinGW выбирает это.