| 作者 | Kai Tietz, Jonathan Yong, 多数のGNU貢献者 |
|---|---|
| 開発元 | OneVision Software |
| 初版 | 2005年 |
| 最新版 |
14.0.0
/ 2026年3月27日 |
| リポジトリ | |
| プログラミング 言語 | C言語, C++ |
| 対応OS | Windows, Linux, macOS |
| 前身 | MinGW |
| 種別 | コンパイラ |
| ライセンス | パブリックドメイン (ヘッダ), GNU General Public License (コンパイラおよびツールチェーン), Zope Public License |
| 公式サイト |
www |
Mingw-w64はWindowsのPEアプリケーションを制作・クロスコンパイルするためのフリーかつオープンソースなソフトウェア開発環境である。 2005–2010年にMinGW (Minimalist GNU for Windows)からフォークされた。
Mingw-w64にはGNUコンパイラコレクション (GCC) の移植、Windows用のGNU Binutils (アセンブラ、リンカ、アーカイブマネージャ)、自由に配布可能なWindows専用のヘッダファイルとWindows APIを利用可能にする静的リンクライブラリ、WindowsネイティブのGNUデバッガ、その他ユーティリティが含まれる。
Mingw-w64はMicrosoft Windowsプラットフォーム上でネイティブに、Linuxや他のUnix系システム上でクロスホストに、もしくはMSYS2またはCygwinにより「クロスネイティブ」に動作する。32ビットまたは64ビットのx86実行ファイルを生成できる。ターゲット名はそれぞれi686-w64-mingw32とx86_64-w64-mingw32を使用する。
2005年、MinGWプロジェクトが重要な新しいAPIや64ビットへの対応に向けた更新を行わないことに対し、OneVision Softwareによりクリーンルーム手法の原則に基づき作成された。2008年にはオープンソースとして継続することを条件に、主任開発者の一人であるKai Tietzにコードが譲渡された。当初は元のMinGWプロジェクトに対して申し出ていたが、非公開もしくはプロプライエタリな情報が利用されている可能性があるとして拒否された。さまざまな理由により、Kai TietzはMinGWとの連携を諦めた。
MinGW-w64はWin32 APIをより完全に実装する。主な追加項目は以下のとおりである。
pexportsを改良したgendefや、WineのMIDLコンパイラのmidlなど。また、Mingw-w64プロジェクトではwinpthreadsライブラリも開発する。これはpthreads-win32に似たラッパーライブラリであるが、GCCでこれをスレッドライブラリとして利用することで、動作する<thread>、<future>、<mutex>などのC++11のスレッドライブラリを構築できるという特徴をもつ。
MSYS2はMicrosoft Windows向けのソフトウェアの配布・構築環境である。Mingw-w64とCygwinを基盤として、Unix用に書かれたコードをWindowsで利用可能にする補助を行う。MinGWに対するMSYSに値する。
Unixのソフトウェア資産をWindowsマシンで利用可能にするプロジェクトは他にCygwinやWindows Subsystem for Linux (WSL)が挙げられる。WSLは仮想マシンを通してELFバイナリを動作させる。CygwinはWindowsのDLLとしてPOSIX環境を構築し、EXEファイルにコンパイルされたアプリケーションはUnix環境にあるかのように動作する。
Cygwinが包括的な環境を提供するのに対し、MSYS2はあくまでWindows上での開発・展開プラットフォームを目標とする。
CygwinもMinGW-w64のコンパイラとライブラリを提供するが、利用可能なライブラリは少なく、プレフィックスもつけられていないため管理が複雑である。
標準のMSYS2環境にはArch Linuxのパッケージ管理システムであるPacmanやbashシェル、その他のUnixプラグラムが付随している。POSIX実装にはCygwinのcygwin1.dllより派生した20MBほどのランタイムライブラリmsys-2.0.dllを使用する。Cygwinの開発を追うように常に開発が進められている。ソフトウェア開発者がPacmanを使い管理し、各種ツールを実行する開発環境としての機能を期待されている。それに不要と判断された機能は削除されている。
Cygwinと同様に、MSYS2の環境から外部のプログラムを呼び出す際にはファイルパスの翻訳を行う。例えば、notepad++ /c/Users/John/file.txtと実行すると、WindowsのパスC:\Users\John\file.txtに変換してエディタを起動する。
MSYS2とそれに付随するbash環境はGitやGNU OctaveのWindows版に利用されている。
GCCが扱える言語のほとんどはMingw-w64による移植でも対応している(C言語、C++、Objective-C、Objective-C++、Fortran、Adaなど)。C++ならlibstdc++、Fortranならlibgfortranといった具合にGCCのランタイムライブラリが使用される。また、LLVMを使用するclangもMSYS2を通じて使用できる。ARM版のWindowsにも対応する (aarch64-w64-mingw32およびarmv7-w64-mingw32)。
Mingw-w64のGCCとVisual Studioなどといったように、異なるC++コンパイラで生成したバイナリ実行ファイルやDLLはABIや名前修飾の手法の違いにより、基本的にリンク互換でない。それに対して、C言語で書かれたプログラムはリンク互換である。また、 ClangはMSVCのC++ ABIをサポートしており、例外的に互換性をもつ。
Windows固有のフォーマットとそれを扱うためのツールに関しては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.