Mingw-w64

MinGW-w64
원저자OneVision Software
개발자카이 티츠, 조나단 용, 다양한 GNU 기여자
발표일2005년(21년 전)(2005)
안정화 버전
13.0.0 / 2025년 6월 4일(16개월 전)(2025-06-04)
저장소sf.net/p/mingw-w64/mingw-w64/
프로그래밍 언어C, C++
운영 체제마이크로소프트 윈도우, 리눅스, macOS
종류컴파일러
라이선스퍼블릭 도메인 (헤더), GNU 일반 공중 사용 허가서 (컴파일러 및 툴체인), 조프 퍼블릭 라이선스
웹사이트mingw-w64.org

Mingw-w64는 마이크로소프트 윈도우용 PE 포맷 바이너리를 생성하는 자유 및 오픈 소스 개발 도구 모음이다. 2005년에서 2010년 사이에 MinGW (Minimalist GNU for Windows)로부터 포크되었다.

Mingw-w64는 MinGW-w64 플랫폼을 타겟으로 하는 GNU 컴파일러 모음 (GCC) 빌드, 윈도우용 GNU 바이너리 유틸리티 (어셈블러, 링커, 아카이브 관리자), 자유롭게 배포 가능한 윈도우 API용 윈도우 전용 헤더 파일 및 정적 임포트 라이브러리 세트, GNU 프로젝트의 GNU 디버거의 윈도우 네이티브 버전 및 기타 유틸리티를 포함한다.

Mingw-w64는 마이크로소프트 윈도우에서 네이티브로 실행하거나, 리눅스 (또는 기타 유닉스)에서 교차 플랫폼으로 실행하거나, MSYS2 또는 시그윈에서 "크로스 네이티브"로 실행할 수 있다. Mingw-w64는 i686-w64-mingw32 및 x86_64-w64-mingw32라는 타겟 이름으로 x86용 32비트 및 64비트 실행 파일을 생성할 수 있다.

역사

2005년, 기존 MinGW 프로젝트가 주요 신규 API와 64비트 지원을 포함하기 위한 코드 베이스 업데이트를 신속하게 진행하지 않자, OneVision Software는 클린룸 설계를 통해 64비트 윈도우 API를 역공학하기 시작했다. 2008년, OneVision은 해당 코드를 오픈 소스로 유지한다는 조건하에 수석 개발자 중 한 명인 카이 티츠에게 기증했다. 이 코드는 처음에는 원래의 MinGW 프로젝트에 제출되었으나, 비공개 또는 독점 정보 사용 의심으로 거부당했다. 여러 이유로 MinGW-w64 프로젝트의 수석 개발자이자 공동 창립자인 카이 티츠는 MinGW와의 추가 협력을 시도하지 않기로 결정했다.

MinGW-w64는 더 완전한 윈도우 API 구현을 제공하며, 그 내용은 다음과 같다.

또한, Mingw-w64 프로젝트는 pthreads-win32와 유사한 래퍼 라이브러리인 winpthreads를 유지 관리한다. 주요 차이점은 GCC가 이를 스레드 라이브러리로 사용하여 기능적인 C++11 스레드 라이브러리 <thread>, <future>, <mutex>를 구현할 수 있게 한다는 점이다.

MSYS2

MSYS2 ("minimal system 2")는 Mingw-w64와 시그윈을 기반으로 하는 마이크로소프트 윈도우용 소프트웨어 배포판이자 개발 플랫폼으로, 유닉스 세계의 코드를 윈도우에 배포하는 것을 돕는다. 이는 이전 MinGW에서 MSYS가 했던 역할과 동일하다.

MSYS2는 유닉스 코드를 윈도우 기기로 가져온다는 목표를 시그윈, 리눅스용 윈도우 하위 시스템 (WSL) 등 여러 다른 프로젝트와 공유한다. WSL은 관리형 가상 머신을 통해 윈도우에서 리눅스 ELF 바이너리를 실행할 수 있게 한다. 시그윈은 윈도우 DLL로서 완전한 POSIX 환경을 제공하며, 여기서 윈도우 EXE로 컴파일된 애플리케이션은 유닉스 환경에서와 같이 실행된다.

시그윈처럼 완전한 환경을 제공하는 대신, MSYS2는 개발 및 배포 플랫폼이 되는 것을 과제로 삼는다.

메인 MSYS2 환경은 패키지 관리자 (아치 리눅스의 Pacman), bash 셸, 그리고 기타 유닉스 프로그램을 제공한다. 시그윈 라이브러리 cygwin1.dll에서 파생된 msys-2.0.dll(~20MB) 런타임 라이브러리를 사용하며, 시그윈 개발을 따라잡기 위해 정기적으로 업데이트된다. 이는 개발자들이 (pacman을 사용하여) 관리하고 도구를 실행할 수 있는 개발 환경을 지향하며, 개발에 불필요하다고 판단되는 기능은 제거되었다.

시그윈과 마찬가지로 MSYS2는 MSYS2 환경 외부에서 실행되는 소프트웨어를 위한 경로 변환을 지원한다. 예를 들어 notepad++ /c/Users/John/file.txt 명령을 사용하면 윈도우 경로 C:\Users\John\file.txt의 파일을 여는 편집기를 실행할 수 있다.

MSYS2와 그 bash 환경은 Git 및 GNU 옥타브의 공식 윈도우 배포판에서 사용된다.

컴파일러

GCC가 지원하는 대부분의 언어는 Mingw-w64 포트에서도 지원된다. 여기에는 C, C++, 오브젝티브-C, Objective-C++, 포트란, Ada가 포함된다. GCC 런타임 라이브러리(C++용 libstdc++, 포트란용 libgfortran 등)가 사용된다. LLVM의 clang을 mingw-w64용으로 패키징한 것도 MSYS2에서 제공한다. 이는 윈도우용 ARM을 지원한다 (aarch64-w64-mingw32 및 armv7-w64-mingw32).

서로 다른 C++ 컴파일러(예: Mingw-w64 GCC 및 비주얼 스튜디오)로 생성된 바이너리(실행 파일 또는 DLL)는 C++ 런타임의 차이로 인해 발생하는 서로 다른 ABI 및 네임 맹글링 방식으로 인해 일반적으로 링크 호환성이 없다. 그러나 컴파일된 C 코드는 링크 호환성이 있다. Clang은 윈도우에서 MSVC의 C++ ABI를 대체로 지원하므로 예외이다.

binutils 문서에는 다양한 윈도우 전용 형식과 이를 처리하기 위한 특수 도구에 대한 최신 정보가 있다.

각주

  1. 1 2 “(MinGW-w64) History”. 《MinGW-w64 Wiki》. 2019년 7월 5일에 원본 문서에서 보존된 문서. 2016년 2월 18일에 확인함.
  2. ↑ 대니 스미스 (2007년 8월 13일). “Re: Sub project for w64 header & crt”. 뉴스그룹: comp.gnu.mingw.devel. Usenet: 000001c7dd83$9ae74310$fe6d65da@THOMAS. 2020년 7월 23일에 원본 문서에서 보존된 문서. 2020년 7월 23일에 확인함. From a cursory spot check of a few files, the crt sources in particular appear to contain too much undocumented material that I suspect may be derived from proprietary sources. I have since avoided looking at the mingw-w64 sources to avoid any taint of copyright abuse. I could well be wrong, but I would rather be safe than jeopardise the future of the mingw32, which has tried to maintain a "clean-room" ethic during its development.
  3. ↑ 마샬, 키스 (2009년 7월 19일). “Re: Harmonizing mingwrt / w32api with mingw-w64” (메일링 리스트). 《MinGW-dvlpr》. 2020년 1월 28일에 원본 문서에서 보존된 문서. 2014년 6월 12일에 확인함. However, we would require a formal audit of mingw-64 code, to ensure conformance with our requirements for truly open documentation of sources, before [merge of mingw-w64] could be completed.
  4. ↑ 티츠, 카이 (2014년 7월 20일). “Re: Harmonizing mingwrt / w32api with mingw-w64” (메일링 리스트). 《MinGW-dvlpr》. 2020년 1월 28일에 원본 문서에서 보존된 문서. 2014년 6월 12일에 확인함.
  5. ↑ “MinGW-w64”. MinGW-w64.org. 2019년 10월 18일에 원본 문서에서 보존된 문서. 2013년 5월 30일에 확인함.
  6. ↑ “MSYS2” (영어). 《www.msys2.org》. 2021년 2월 7일에 원본 문서에서 보존된 문서. 2022년 9월 30일에 확인함.
  7. ↑ “ZSH on Windows via MSYS2”. 2018년 7월 26일. 2020년 1월 28일에 원본 문서에서 보존된 문서. 2020년 1월 30일에 확인함.
  8. 1 2 3 “How does MSYS2 differ from Cygwin · msys2/Msys2 Wiki”. 2023년 2월 15일에 원본 문서에서 보존된 문서. 2023년 2월 20일에 확인함.
  9. ↑ 비스와스, 수프리요 (2017년 4월 29일). “How to Get an Unix/Linux Environment on Windows with MSYS2” (미국 영어). 《Boolean World》. 2022년 9월 30일에 원본 문서에서 보존된 문서. 2022년 9월 30일에 확인함.
  10. ↑ “Package: mingw-w64-x86_64-clang”. 《MSYS2 Packages》. 2020년 10월 30일에 원본 문서에서 보존된 문서. 2020년 2월 12일에 확인함.
  11. ↑ 스토르쇼, 마틴 (2020년 4월 23일). “mstorsjo/llvm-mingw”. 《깃허브》. 2020년 11월 29일에 원본 문서에서 보존된 문서. 2020년 4월 27일에 확인함.
  12. ↑ “Interoperability of Libraries Created by Different Compiler Brands”. 《mingw.org》. 2020년 11월 30일에 원본 문서에서 보존된 문서. 2022년 9월 30일에 확인함.
  13. ↑ “MSVC compatibility”. 《Clang 11 documentation》. 2021년 1월 26일에 원본 문서에서 보존된 문서. 2020년 2월 12일에 확인함.
  14. ↑ “ld: win32”. 《sourceware.org》. 2020년 2월 14일에 원본 문서에서 보존된 문서. 2020년 2월 10일에 확인함.
  15. ↑ “GNU Binary Utilities Documentation”. 《sourceware.org》. 2020년 2월 19일에 원본 문서에서 보존된 문서. 2020년 2월 10일에 확인함.

외부 링크