MinGW
開発元 | MinGW project |
---|---|
初版 | 1998年7月1日 |
最新版 |
4.5.0
/ 2010年4月19日 |
対応OS | Windows |
種別 | 開発環境 |
ライセンス | BSD License / GNU General Public License (GPL) / Public Domain |
公式サイト | MinGW Home |
MinGW(ミン・ジー・ダブリュー、Minimalist GNU for Windows)はGNUツールチェーンのWindows移植版である。MinGWはWindows APIのためのヘッダファイルを含んでおり、フリーのコンパイラであるGCCを、Windowsアプリケーションの開発のために利用できる。
MinGWプロジェクトでは、32bit環境向けの2つの主要なパッケージを開発、配布している。Windows環境に移植されたGCCは、コマンドラインから使用することも、IDEへ統合することもできる。もう1つのMSYS (minimal system) は軽量のUNIX風シェル環境であり、端末エミュレータのrxvtと、開発ツールのautoconfを実行可能にするためのPOSIXコマンド群とが含まれている。
この2つのパッケージは、Cygwinからフォークして誕生した。CygwinではWindowsの機能性を犠牲にすることで、より機能的なUnix風環境を提供している。なお、どちらのパッケージもフリーソフトウェアで、Win32APIを利用するためのヘッダファイルはパブリックドメインで提供されており、GNUツールの移植版はGPLである。MinGWの個々のGNUツール及びMSYSは、MinGWの公式サイトより入手可能である。
また、派生プロジェクトとしてMingw-w64が存在する。
名称の由来
MinGWの名称はMinimalist GNU for Windows(Windowsのための最小限度のGNUの意)を表す。Win32 APIの為のヘッダーを提供するのでMingw32とも呼ばれる。MinGWの規範となる発音は未だ決定されていないが、一般的には、"ming wee", "min gee double-u", "ming double-u" または "min gnu" などのように発音されている。
特徴
MinGWとMSYSを両方合わせても小さく、それ自身で完結可能な環境であり、リムーバブル・メディアから使用することが可能である。その際に、コンピュータ上のレジストリやファイルに影響を与えない。一方、Cygwinはより多くの機能を提供するために、インストールとその後の管理が複雑である。
さらに、MinGWはLinux上など異なるOSでのクロスコンパイルにも対応している。このため、MSYSがインストールされたWindowsを利用せずに、Windows用のアプリケーションを開発できる。
Cygwinとの比較
MinGWはCygwin 1.3.3からフォークした。Cygwin、MinGWいずれもUnixソフトウェアのWindowsへの移植に使用されるが、異なる方針を採っている。CygwinはWindows上に、Linuxや他のUNIXシステムに見られるような、完全なPOSIX層を提供することを目標にしており、互換性のために必要であれば性能も犠牲にしている。一方でMinGWはフリーのコンパイラと各種ツールのみを提供し、性能を重視している。
アプリケーション移植の観点で見ると、MinGWはPOSIX APIを提供していない。このため、Cygwinでコンパイル可能だがMinGWでは不可能なUnixアプリケーションが存在する。具体的には、特定のPOSIXの機能を要求する、又は、POSIX環境中で実行されることを前提とするアプリケーションが当てはまる。この問題を回避しMinGWで動かすためには、cygwin1.dll内の関数を直接利用する方法または、eC(Ecere SDK)、SDL、wxWidgets、Qt、GTKあるいはgnulibのようなプラットフォーム非依存のライブラリを使用してアプリケーションを作成する必要がある。そのほかの移植時の注意点として、MinGWでは、ネットワークプログラミングの read/write を、recv/send に置き換える必要がある。これは、Windowsでのsocketの実装がWinsockであり、POSIXと異なるためである。このため、単なるツールチェーンとして提供されているMinGWでは、この修正は今後とも必要である[1][2]。
この違いは、MinGWとcygwinで、libcライブラリ、標準Cライブラリをはじめとして、異なるライブラリを使用しているためである。MinGWでは、マイクロソフトから直接提供されるライブラリmsvcrt.dllを用いている。しかし、Cygwinでは、POSIX互換の為にDLL (cygwin1.dll) を独自に導入して解決している。Cygwinでは、独自ライブラリを用いているため、ランタイムライブラリのライセンスによる制限を受ける[3]。なお、MinGWでも、MSYSのライブラリ(msys-1.0.dllやmsys-z.dll)をリンクしている場合、これらのランタイムライブラリライセンスによる制限 (GPL) を受ける[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上でも開発することができる。Linuxの場合、Wineを使ってテストを行うことが簡便である。なお、RPMファイルは、次のページから取得することができる。[2]なお、Fedoraでは、以下のSIGが立ち上がっている。[3]クロスコンパイル環境でドライバを作るための注意点などは、以下の記事も参考になる。[4]
MinGWで作成出来るアプリケーション
- Git(分散バージョン管理システム)
- Windows PV driver for Xen(準仮想ドライバ)
- Source Navigator(統合開発環境・ソース解析ツール)
- Ecere SDK(C言語上位互換オブジェクト指向言語であるeC言語、統合開発環境、GUIや3Dライブラリなどを中心に構成されたクロスプラットホームのソフトウェア開発キット)
64ビット向け開発環境
MinGWプロジェクトでは64ビット環境向けのコンパイラセットは提供されていない。
64ビット向け開発環境は、mingw.org から2007年にフォークしたMingw-w64[5]と、MinGWプロジェクトのMSYSを組み合わせれば構築できる。
そのほか
MinGWの開発環境としては、MSYSが標準であるが、そのほかに、EclipseやDOSプロンプト、CLionで開発することもできる。
Intel Threading Building Blocksも、将来的には、MinGWでコンパイルできる見込みである[6]。
関連項目
- GNUコンパイラコレクション(GCC)
- Cygwin
- TDM-GCC
- Interix
- Microsoft Windows Services for UNIX(SFU), Subsystem for UNIX-based Applications(SUA)
出典
- ^ Winsock Functions (Windows) Microsoft Developer Network
- ^ [Mingw-users] about fprintf stderr support on mingw MinGW - Minimalist GNU for Windows / Mailing Lists
- ^ Cygwin Licensing Terms
- ^ FAQ | MinGW
- ^ Mingw-w64 - GCC for Windows 64 & 32 bits
- ^ [1]
外部リンク
- MinGW Home
- MinGW OSDN Home
- SourceForge Project Of The Month (September 2005)
- MinGW FAQ[リンク切れ](日本語)
- "-mno-cygwin" -- Building MinGW executables using Cygwin[リンク切れ]
- MinGW RSS
環境構築事例
- VideoLANの場合(英語)