| 원저자 | OneVision Software |
|---|---|
| 개발자 | 카이 티츠, 조나단 용, 다양한 GNU 기여자 |
| 발표일 | 2005년 |
| 안정화 버전 | 13.0.0
/ 2025년 6월 4일 |
| 저장소 | sf |
| 프로그래밍 언어 | C, C++ |
| 운영 체제 | 마이크로소프트 윈도우, 리눅스, macOS |
| 종류 | 컴파일러 |
| 라이선스 | 퍼블릭 도메인 (헤더), GNU 일반 공중 사용 허가서 (컴파일러 및 툴체인), 조프 퍼블릭 라이선스 |
| 웹사이트 | mingw-w64 |
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 구현을 제공하며, 그 내용은 다음과 같다.
gendef (MinGW의 pexports 유틸리티의 개선 버전), widl (와인의 MIDL 컴파일러)과 같은 유용한 도구.또한, Mingw-w64 프로젝트는 pthreads-win32와 유사한 래퍼 라이브러리인 winpthreads를 유지 관리한다. 주요 차이점은 GCC가 이를 스레드 라이브러리로 사용하여 기능적인 C++11 스레드 라이브러리 <thread>, <future>, <mutex>를 구현할 수 있게 한다는 점이다.
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의 파일을 여는 편집기를 실행할 수 있다.
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 문서에는 다양한 윈도우 전용 형식과 이를 처리하기 위한 특수 도구에 대한 최신 정보가 있다.
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.
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.