2015-01-15 1 views
3

내 관찰에 따르면, MinGW는 C의 경우 MSVCRT을, C++의 경우 libstdC++을 사용합니다.MinGW는 어떻게 C++ 라이브러리 지원을 구현 했습니까?

그렇다면 어떻게 협력 할 수 있습니까? 그리고, 왜 C와 상관없이 C++ 지원, MSVCRT 균일하지 + MSVCPRT 또는 + 된 libstdC++ 입심 .

은 내가 믹스 인이 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 용 코드 (단지는 Win32 API를 사용하여)를 컴파일하기 위해

    ,
    는 MinGW,
    을 (는 Win32 API를 제공하는) 기본 C 런타임 라이브러리로 MSVCRT를 사용하고 연결하기 위해 처음부터 다리 층을 wirte 표준 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. 
    */ 
    

    그리고 파일 내의

    , 당신은 그것이는 Win32 API 호출로 변환 할 실제로 의미 _CRTIMP를 많이 찾을 수 있습니다.

    그러나 C++ 부품의 경우 매우 유선입니다.
    MinGW는 libstdC++를 사용하여 C++ 지원을 구현하는 것으로 보입니다.

    내가 iostream 같은 C++ 헤더 파일을 확인, 그것은 _CRTIMP 더 이상 과정 또는 MS 스타일의 상징이

    // 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. 
    

    같은 배너가 있습니다.
    그래서 MinGW는 MSVCRT를 기반으로하는 libstdC++를 만들었습니다!

+4

C 라이브러리는 syscall 래퍼로 가득 차 있기 때문에 해당 syscall은 Linux/Hurd에 종속되어 있기 때문입니다. C++ 라이브러리는 꽤 많은 사용자 공간 (modulo 지원)이며 합리적인 C 라이브러리의 상단에 살 수 있습니다. –

+0

@SeverinPappadeux 당신은 저를 상기시킵니다! 나는 심지어 그런 기본적인 사실을 잊어 버린다. – Eugene

+0

gcc가'msvcprt.dll'과 호환되는 것은 거의 없습니다. –

답변

0

여기 내 이해는 나를 고쳐주세요.

C 라이브러리는 C++ 라이브러리 이상을 의미합니다.

C 라이브러리는 플랫폼 종속적 인 system calls에서 플랫폼 독립적 인 C calls까지의 다리입니다.

C++ 라이브러리는 플랫폼 독립적 인 C calls에서 시작하여 객체 지향 기능을 추가하고 훨씬 쉽게 사용할 수 있도록합니다.

그래서 glibc를 사용하지 않는 이유는 GPL 라이센스 문제보다 훨씬 더 많은 이유입니다. C 라이브러리가 system calls을 만들고 OS와 통신해야하기 때문입니다. 따라서 대부분의 경우 OS와 함께 제공되며 플랫폼에서 사용할 수있는 유일한 C 라이브러리입니다.

따라서 C++ 라이브러리는 C 라이브러리를 기반으로하므로 플랫폼에 독립적입니다. 따라서 libstdc++의 코드를 사용하면 Windows에서 자동으로 작동합니다. 또한 libstdc++MSVCRT을 기반으로 실행할 수있는 이유를 설명합니다.

libstdc++이 최신 C++ 표준을보다 잘 지원하므로 MinGW에서 선택하기가 훨씬 쉽습니다.

관련 문제