내 관찰에 따르면, 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++를 만들었습니다!
C 라이브러리는 syscall 래퍼로 가득 차 있기 때문에 해당 syscall은 Linux/Hurd에 종속되어 있기 때문입니다. C++ 라이브러리는 꽤 많은 사용자 공간 (modulo 지원)이며 합리적인 C 라이브러리의 상단에 살 수 있습니다. –
@SeverinPappadeux 당신은 저를 상기시킵니다! 나는 심지어 그런 기본적인 사실을 잊어 버린다. – Eugene
gcc가'msvcprt.dll'과 호환되는 것은 거의 없습니다. –