}}
'''MinGW'''(ミン・ジー・ダブリュー、'''Min'''imalist '''G'''NU for '''W'''indows)は[[GNU]][[GNUツールチェーン]]、[[GNUコンパイラコレクション|ツールチェーンGCC]]のを[[Microsoft Windows|Windows]]移植版で利用できるようにする開発環境である。MinGWは[[Windows API]]のための[[ヘッダファイル]]を含んでおり、[[フリーソフトウェア|フリー]]の[[コンパイラ]]GCCである[[GNUコンパネイラコレクション|GCC]]を、<!-- which do not rely on the presence of a [[runtime]] emulating [[Unix-like]] functionality like programs compiled with the [[Cygwin]] port -- -- Cygwin移植版を用いてコンパイルされたプログラムのように[[UNIX]]風APIをエミュレートするランタイムに依存しない、 -- -- 訳注:収まりが悪いので取る -->ティブWindowsアプリケーションのを開発のために利用できる。
MinGWプロジェクトでは、[[32ビット]]環境向けのに主に2つの主要なパッケージを開発、配布している。ひとつはWindows環境に移植されしたGCCはで、[[Cmd.exe|コマンドライン]]から使用することも、や[[統合開発環境|IDE]]へ統合することもから利用できる。もう1つは軽量のUNIX風シェル環境である[[MSYS]] (''minimal system'') は軽量のUNIX風シェル環境であり、る。[[端末エミュレータ]]の[[rxvt]]と、開発ツールの[[Autotools|autoconf]]を実行可能にするための[[POSIX]]コマンド群とがも含まれている。これらは[[Cygwin]]をフォークして誕生した。
この2つのパッケージは、[[Cygwin]]からフォークして誕生した。CygwinではWindowsの機能性を犠牲にすることで、より機能的なUNIX風環境を提供している。なお、どちらのパッケージも[[フリーソフトウェア]]で、Win32APIWin32 APIを利用するためのヘッダファイルは[[パブリックドメイン]]で提供されており、いる。GNUツールの移植版は[[GNU General Public License|GPLライセンス]]である。MinGWの個々のGNUツール及びMSYSこれらは、MinGWの公式サイトより入手可能である。
また、派生プロジェクトとして{{仮リンク|Mingw-w64|en|Mingw-w64}}が存在すある。
== 名称の由来 ==
MinGWの名称は''Minimalist [[GNU]] for Windows''(Windowsのための最小限度のGNUの意)GNU)を表す。''Win32'' APIの為ためのヘッダーを提供するので''Mingw32''とも呼ばれる。''MinGW''の規範となる発音は未だ決定されていないが、一般的には、"''ming wee''", 、"''min gee double-u''", 、"''ming double-u''" または "''min gnu''" などのように発音されている。
== 特徴 ==
MinGWと[[MSYS]]をの両方者を合わせても小さく、そ軽量である。これらは自身で完結可能な環境でありるため、リムーバブル・メディアから使用することがも可能である。その際に、コンピュータ上の[[レジストリ]]やファイルに影響を与えない。一方、Cygwinはより多くの機能を提供するために、インストールとが必要であり、その後の管理がも複雑である。
さらに、MinGWは[[Linux]]上など異なる非Windows [[オペレーティングシステム|OS]]上での[[クロスコンパイル]]にも対応している。このためおり、MSYSがインストールされたWindows OSを利用せずに、Windows用の アプリケーションを開発できる。
== Cygwinとの比較 ==
MinGWはCygwin 1.3.3から[[フォーク (ソフトウェア開発)|フォーク]]した。Cygwin、MinGW両者はいずれもUNIXソフトウェアのをWindowsへの移植することを目的に使用されするが、異なる方針を採っている。CygwinはWindows上に、Linuxや他のUNIXシステムに見られるような、完全なPOSIX層を提供することを目標にしており、互換性のために必要であれば性能も犠牲にしている。一方でMinGWはフリーのコンパイラと各種ツールのみを提供し、性能を重視している。
アプリケーション移植CygwinはWindows上に完全なPOSIX層を提供することを目標にしており、互換性の観点ために必要で見あれば性能も犠牲にしている。その一方で、MinGWはコンパイラと各種ツールのみを提供し、性能を重視している。換言するとMinGWはPOSIX APIを提供していない。このため、Cygwinではコンパイル可能だが、MinGWでは不可能なUNIXアプリケーションが存在する。具体的には、特定のPOSIXの機能を要求する、又は、POSIX環境中で実行されることを前提とするアプリケーションが当てはまである。この問題を回避しMinGWで動かするためには、cygwin1.dll内の関数を直接利用する方法、または、{{仮リンク|eC(Ecere SDK)|en|eC_(programming_language)}}、[[SDL]]、[[wxWidgets]]、[[Qt]]、[[GTK (ツールキット)|GTK]]あるいは、[[gnulib]]のようなプラットフォーム非依存のライブラリを使用してアプリケーションを作成する必要方法がある。そのほかの移植時の注意点として、MinGWでは、ネットワークプログラミングの read/write を、recv/send に置き換える必要がある。これは、Windowsでのsocketの実装が[[Winsock]]であり、POSIXと異なるためである。このため、単なるツールチェーンとして提供されているMinGWでは、この修正は今後とも必要である<ref>[http://msdn2.microsoft.com/en-us/library/ms741394.aspx Winsock Functions (Windows)] Microsoft Developer Network</ref><ref>[http://sourceforge.net/mailarchive/forum.php?thread_name=c9b6d9a50803190317v104f46bcxde295e0b782c4a4e%40mail.gmail.com&forum_name=mingw-users <nowiki>[Mingw-users]</nowiki> about fprintf stderr support on mingw] MinGW - Minimalist GNU for Windows / Mailing Lists</ref>。
この違いは、MinGWとcygwinで、libcライブラリ、Cygwinは[[標準Cライブラリ]]をはじめとして、異なるライブラリを使用しているためである。MinGWで前者は、[[マイクロソフト]]から直接提供されるライブラリであるmsvcrt.dllを用いている。しかし、Cygwinで後者は、POSIX互換の為に独自の[[ダイナミックリンクライブラリ|DLL]] (cygwin1.dll) を独自に導入して解決し用いている。Cygwinではコンパイルしたプログラムを配布する場合、利用者はこの独自ライブラリを用いているため、(ランタイムライブラリの)も必要となる。これはソフトウェアと共に配布できるが、ソフトウェアはオープンソースライセンスによ準拠する制限を受け必要がある<ref>[http://cygwin.com/licensing.html Cygwin Licensing Terms]</ref>。なお、MinGWでも、MSYSのライブラリ(msys-1.0.dllやmsys-z.dll)をリンクしている場合、これら同様のランタイムライブラリライセンスによる制限 (GPL) を受ける<ref>[http://www.mingw.org/wiki/FAQ FAQ | MinGW]</ref>。
その他移植時の注意として、MinGWではネットワークプログラミングの read/write をrecv/send に置き換える必要がある。これはWindowsのsocketが[[Winsock]]であり、POSIXと異なるためである。単なるツールチェーンであるMinGWでは、この置き換えは今後も必須である<ref>[http://msdn2.microsoft.com/en-us/library/ms741394.aspx Winsock Functions (Windows)] Microsoft Developer Network</ref><ref>[http://sourceforge.net/mailarchive/forum.php?thread_name=c9b6d9a50803190317v104f46bcxde295e0b782c4a4e%40mail.gmail.com&forum_name=mingw-users <nowiki>[Mingw-users] about fprintf stderr support on mingw</nowiki>] MinGW - Minimalist GNU for Windows / Mailing Lists</ref>。
なお、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によるビルドを行うことができる。 ▼
▲なお、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)。
ライブラリの依存関係は、"objdump -p ファイル名" で見ることができる。 ▼
▲その代わりとして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 (ファイルフォーマット)|RPMファイル]]は、次のページから取得することができる。:[http://mirzam.it.vu.nl/mingw/]なお、。[[Fedora]]では、以下のSIGが立ち上がっている。:[https://fedoraproject.org/wiki/SIGs/MinGW]クロスコンパイル環境でドライバを作るための注意点などは、以下の記事も参考になる。:[http://strdup.livejournal.com/34596.html]
== MinGWで作成出来るアプリケーション ==
== 64ビット向け開発環境 ==
MinGWプロジェクトでは[[64ビット]]環境向けのコンパイラセットは提供されていない。mingw.org から2007年にフォークしたMingw-w64<ref>[https://mingw-w64.org/ Mingw-w64 - GCC for Windows 64 & 32 bits]</ref>とMinGWプロジェクトのMSYSを組み合わせれば構築できる。
64ビット向け開発環境は、mingw.org から2007年にフォークしたMingw-w64<ref>[https://mingw-w64.org/ Mingw-w64 - GCC for Windows 64 & 32 bits]</ref>と、MinGWプロジェクトのMSYSを組み合わせれば構築できる。
== そのほか他 ==
MinGWの開発環境としては、MSYSが標準であるが、そのほか他に、も[[Eclipse (統合開発環境)|Eclipse]]や[[DOSプロンプト]]、[[CLion(統合開発環境)|CLion]]で開発することもできる。
[[Intel Threading Building Blocks]]も、将来的には、MinGWでコンパイルできる見込みである<ref>[http://softwarecommunity.intel.com/isn/Community/en-US/forums/thread/30250439.aspx]</ref>。
== 関連項目 ==
* [[TDM-GCC]]
* [[Interix]]
* [[Microsoft Windows Services for UNIX]](SFU), * Subsystem for UNIX-based Applications(SUA)
== 出典 ==
|