MinGW

MinGW(Minimalist GNU for Windows)は、Windows環境でGNUツールチェーン、特にGCC(GNU Compiler Collection)を利用可能にするための開発環境です。Windows APIヘッダファイルを提供することで、GCCを用いてネイティブなWindowsアプリケーションを開発できるようになります。MinGWプロジェクト自体は開発がほぼ終了していますが、その精神を受け継いだMingw-w64が積極的に開発を続けています。

MinGWの構成



MinGWプロジェクトは、主に32ビット環境向けに2つの主要なパッケージを提供しています。一つは、Windowsに移植されたGCCであり、コマンドラインや統合開発環境(IDE)から利用できます。もう一つは、軽量なUNIX風シェル環境であるMSYS(minimal system)です。MSYSには、端末エミュレータのrxvtや、autoconfなどの開発ツールを実行するためのコマンド群が含まれています。これらのMSYSのコンポーネントは、Cygwinプロジェクトから派生したものです。

Win32 APIを利用するためのヘッダファイルパブリックドメインで提供されており、誰でも自由に利用できます。一方、GNUツールの移植版はGPL(GNU General Public Licenseライセンスの下で配布されており、MinGWの公式サイトから入手可能です。

名称の由来



MinGWという名称は、「Minimalist GNU for Windows」(Windowsのための最小限度のGNU)に由来します。また、Win32 APIのヘッダファイルを提供していることから、Mingw32とも呼ばれることがあります。MinGWの発音は確定していませんが、一般的には「ミン・ジー・ダブリュー」、「ミング・ウィー」、「ミン・グニュー」などと発音されています。

特徴



MinGWとMSYSを組み合わせても、全体として非常に軽量です。これらの環境は自己完結型であり、リムーバブルメディアから起動することも可能です。また、コンピュータのレジストリやファイルシステムに影響を与えることはありません。Cygwinと比較すると、Cygwinはより多くの機能を提供するためにインストールが必要であり、管理も複雑になる傾向があります。

MinGWはLinuxなどの非Windows OS上でのクロスコンパイルにも対応しています。これにより、Windows OSを使用せずにWindowsアプリケーションを開発することが可能になります。

Cygwinとの比較



MinGWは、Cygwin 1.3.3をベースにフォークされました。両者ともUNIXソフトウェアをWindowsに移植することを目的としていますが、そのアプローチは異なります。CygwinはWindows上に完全なPOSIX層を提供することを目指しており、互換性を重視するあまり、性能が犠牲になることがあります。一方、MinGWはコンパイラと関連ツールのみを提供し、性能を最優先に考えています。つまり、MinGWはPOSIX APIを提供していません。そのため、Cygwinではコンパイル可能なUNIXアプリケーションの中には、MinGWではコンパイルできないものが存在します。これは、特定のPOSIX機能を必要とするアプリケーションや、POSIX環境を前提としたアプリケーションの場合に見られます。この問題を回避するためには、`cygwin1.dll`の関数を利用するか、eC(Ecere SDK)、SDL、wxWidgets、Qt、GTK、gnulibのようなプラットフォーム非依存のライブラリを使用する必要があります。

MinGWとCygwinは、標準Cライブラリをはじめとする使用しているライブラリが異なります。MinGWはマイクロソフトが提供する`msvcrt.dll`を使用するのに対し、CygwinはPOSIX互換のために独自のDLLである`cygwin1.dll`を使用します。Cygwinでコンパイルしたプログラムを配布する場合、ユーザーは`cygwin1.dll`も必要になります。これはソフトウェアと一緒に配布できますが、配布するソフトウェアはオープンソースライセンスに従う必要があります。MinGWでも、MSYSのライブラリ(`msys-1.0.dll`や`msys-z.dll`)をリンクしている場合は、同様の制限(GPL)を受けることになります。

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

以前は、CygwinのGCCで`-mno-cygwin`オプションを使用することで、MinGW用のバイナリを作成することができました。しかし、gcc-4以降ではこのオプションは削除され、Cygwin用のGCCとは別に、MinGW用のGCCがクロス開発用のコンパイラとして提供されるようになりました。例えば、2020年4月現在、Cygwin64ビット版では、`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ファイルは[2]から取得でき、Fedoraでは[3]のようなSIGが立ち上がっています。クロスコンパイル環境でドライバを作成する際の注意点などは、[4]の記事が参考になります。

MinGWで作成できるアプリケーション



MinGWを使用して、以下の様なアプリケーションを開発できます。

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

64ビット向け開発環境



MinGWプロジェクト自体では64ビット環境向けのコンパイラセットを提供していませんが、2007年にmingw.orgからフォークした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)

出典



[1] MinGW 公式サイト

外部リンク



mingw.org - 2020年まで存在したかつてのホームページのWayback Machineの記録
MinGW OSDN Home
SourceForge Project Of The Month (September 2005)
MinGW FAQ(日本語)
Cygwin'>"-mno-cygwin" -- Building MinGW executables using Cygwin
MinGW RSS

環境構築事例



VideoLANの場合(英語)

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。