MinGW

**MinGW**（ミン・ジー・ダブリュー、**Min**imalist **G**NU for **W**indows）はGNUツールチェーン、GCCをWindowsで利用できるようにする開発環境である。Windows APIのためのヘッダファイルを含んでおり、GCCでネイティブWindowsアプリを開発できる。MinGW自体はほぼ開発終了だが、後継のMingw-w64が積極的に開発されている。

MinGWプロジェクトは32ビット環境向けに主に2つのパッケージを配布している。ひとつはWindowsに移植したGCCで、コマンドラインやIDEから利用できる。もう1つは軽量のUNIX風シェル環境であるMSYS (*minimal system*) である。端末エミュレータのrxvtと開発ツールのautoconfを実行するためのコマンド群も含まれている。これらはCygwinをフォークして誕生した。

Win32 APIを利用するためのヘッダファイルはパブリックドメインで提供されている。GNUツールの移植版はGPLライセンスである。これらはMinGWの公式サイトより入手可能である。

## 名称の由来
MinGWの名称は*Minimalist [[GNU]] for Windows*（Windowsのための最小限度のGNU）を表す。Win32 APIのためのヘッダーを提供するので*Mingw32*とも呼ばれる。発音は未だ決定されていないが一般的には、"*ming wee*"、"*min gee double-u*"、"*ming double-u*" または "*min gnu*" などのように発音されている。

## 特徴
MinGWとMSYSの両者を合わせても軽量である。これらは自身で完結可能な環境であるため、リムーバブル・メディアから使用することも可能である。コンピュータのレジストリやファイルに影響を与えない。Cygwinはより多くの機能を提供するためにインストールが必要であり、その後の管理も複雑である。

Linuxなど非Windows OS上でのクロスコンパイルにも対応しており、Windows OSを利用せずにWindows アプリを開発できる。

## Cygwinとの比較
MinGWはCygwin 1.3.3からフォークした。両者はいずれもUNIXソフトウェアをWindowsへ移植することを目的にするが、異なる方針を採っている。

CygwinはWindows上に完全なPOSIX層を提供することを目標にしており、互換性のために必要であれば性能も犠牲にしている。その一方で、MinGWはコンパイラと各種ツールのみを提供し、性能を重視している。換言するとMinGWはPOSIX APIを提供していない。このため、Cygwinではコンパイル可能だが、MinGWでは不可能なUNIXアプリケーションが存在する。具体的には特定のPOSIXの機能を要求する、又は、POSIX環境を前提とするアプリケーションである。この問題を回避するためには、cygwin1.dllの関数を利用する、または、SDL、wxWidgets、Qt、GTK、gnulibのようなプラットフォーム非依存のライブラリを使用する方法がある。

MinGWとCygwinは標準Cライブラリをはじめとして異なるライブラリを使用している。前者はマイクロソフトから提供されるライブラリであるmsvcrt.dllを用い、後者はPOSIX互換の為に独自のDLL (cygwin1.dll) を用いている。Cygwinでコンパイルしたプログラムを配布する場合、利用者はこの独自ライブラリ（ランタイム）も必要となる。これはソフトウェアと共に配布できるが、ソフトウェアはオープンソースライセンスに準拠する必要がある。MinGWでも、MSYSのライブラリ（msys-1.0.dllやmsys-z.dll）をリンクしている場合、同様の制限 (GPL) を受ける。

その他移植時の注意として、MinGWではネットワークプログラミングの read/write をrecv/send に置き換える必要がある。これはWindowsのsocketがWinsockであり、POSIXと異なるためである。単なるツールチェーンであるMinGWでは、この置き換えは今後も必須である。

CygwinでMinGW用プログラムの開発が可能であった。CygwinのGCCでは gcc-3 までオプション "-mno-cygwin"があり、これを渡すとMinGWのヘッダファイルとランタイムライブラリを用いてバイナリが作成された。gcc-4からはオプションが削除されている。代替として、Cygwin用のGCCとは別にMinGW用のGCCがクロス開発用のコンパイラとして提供されるようになった。2020年4月現在のCygwin（64ビット版）では、gcc-coreがCygwin用、mingw64-x86_64-gcc-coreがMinGW用である（正確には派生プロジェクトのMingw-w64）。

Cygwin用GCCが /usr/bin/gcc.exe であるのに対して、MinGW用GCCは /usr/bin/x86_64-w64-mingw32-gcc.exe のようにコマンド名のプレフィックスとして"x86_64-w64-mingw32-" が付く。その他の付随するツールチェイン(cppやldなど)も同様である。Autotoolsによる configure && make を行う際は、configure に --host=x86_64-w64-mingw32 オプションを与えることでMingw-w64によるビルドを行うことができる。

ライブラリの依存関係は"objdump -p ファイル名" で見ることができる。

## クロス開発環境
MinGWのバイナリはLinux上でも開発することができる。Wineを使ってテストを行うことが簡便である。RPMファイルは次のページから取得することができる：http://mirzam.it.vu.nl/mingw/。Fedoraでは以下のSIGが立ち上がっている：https://fedoraproject.org/wiki/SIGs/MinGWクロスコンパイル環境でドライバを作るための注意点などは、以下の記事も参考になる：http://strdup.livejournal.com/34596.html

## MinGWで作成出来るアプリケーション
*Git（分散バージョン管理システム）
*Windows PV driver for Xen（準仮想ドライバ）
*Source Navigator（統合開発環境・ソース解析ツール）
*Ecere SDK（C言語上位互換オブジェクト指向言語であるeC言語、統合開発環境、GUIや3Dライブラリなどを中心に構成されたクロスプラットホームのソフトウェア開発キット）

## 64ビット向け開発環境
MinGWプロジェクトでは64ビット環境向けのコンパイラセットは提供されていない。mingw.org から2007年にフォークしたMingw-w64とMinGWプロジェクトのMSYSを組み合わせれば構築できる。

## その他
MinGWの開発環境としてはMSYSが標準であるが、その他にもEclipseやDOSプロンプト、CLionで開発することもできる。

Intel Threading Building Blocksも、将来的にはMinGWでコンパイルできる見込みである。

## 関連項目
* Mingw-w64
* GNUコンパイラコレクション（GCC）
* Cygwin
* TDM-GCC
* Interix
* Microsoft Windows Services for UNIX(SFU)
* Subsystem for UNIX-based Applications(SUA)

## 出典

## 外部リンク
* mingw.org - 2020年まで存在したかつてのホームページのWayback Machineの記録
* 
* SourceForge Project Of The Month (September 2005)
* MinGW FAQ
* "-mno-cygwin" -- Building MinGW executables using Cygwin
* MinGW RSS

### 環境構築事例
* VideoLANの場合