MinGW
MinGW(ミン・ジー・ダブリュー、Minimalist GNU for Windows)は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の関数を利用する、またはeC(Ecere SDK)、SDL、wxWidgets、Qt、GTK、gnulibのようなプラットフォーム非依存のライブラリを使用する方法がある。 MinGWとCygwinは標準Cライブラリをはじめとして異なるライブラリを使用している。前者はマイクロソフトから提供されるライブラリであるmsvcrt.dllを用い、後者はPOSIX互換の為に独自のDLL (cygwin1.dll) を用いている。Cygwinでコンパイルしたプログラムを配布する場合、利用者はこの独自ライブラリ(ランタイム)も必要となる。これはソフトウェアと共に配布できるが、ソフトウェアはオープンソースライセンスに準拠する必要がある[1]。MinGWでも、MSYSのライブラリ(msys-1.0.dllやmsys-z.dll)をリンクしている場合、同様の制限 (GPL) を受ける[2]。 その他移植時の注意として、MinGWではネットワークプログラミングの read/write をrecv/send に置き換える必要がある。これはWindowsのsocketがWinsockであり、POSIXと異なるためである。単なるツールチェーンであるMinGWでは、この置き換えは今後も必須である[3][4]。 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ファイルは次のページから取得することができる:[2]。Fedoraでは以下のSIGが立ち上がっている:[3]クロスコンパイル環境でドライバを作るための注意点などは、以下の記事も参考になる:[4] MinGWで作成出来るアプリケーション
64ビット向け開発環境MinGWプロジェクトでは64ビット環境向けのコンパイラセットは提供されていない。mingw.org から2007年にフォークしたMingw-w64[5]とMinGWプロジェクトのMSYSを組み合わせれば構築できる。 その他MinGWの開発環境としてはMSYSが標準であるが、その他にもEclipseやDOSプロンプト、CLionで開発することもできる。 Intel Threading Building Blocksも、将来的にはMinGWでコンパイルできる見込みである[6]。 関連項目
出典
外部リンク
環境構築事例 |