GCC はマルチプラットフォーム コンパイラであるため、このコンパイラには Linux バージョン、MacOS バージョン、Windows バージョンがあります。「MinGW GCC」は、存在する少なくとも 2 つの Windows バージョンの 1 つです。「MinGW システム」は、いくつかの GNU ツールの Windows 版のコレクションに他なりません。
MinGW Wiki のエントリを読んだだけで、「Win32 API によって提供される」は、「MinGW」と Microsoft C コンパイラの間ではなく、「Cygwin」と「MinGW」の違いを明確にしているようです。
多くの GNU ツールには、Windows で使用できる 2 つの異なるバージョンがあります。「Cygwin」と「MinGW」です。
「Cygwin」は、特殊なエミュレーション環境を使用して Unix ライクなファイル システムをエミュレートします。特別なライブラリがプログラムにリンクされ、「fopen」などの関数が「/home/mydir/myfile.txt」形式のファイル名を「c:\programs\cygwin\home\mydir\myfile」などのファイル名に変換します。 TXT"。
「Cygwin」コンパイラを使用すると、「gcc」コマンドラインと、それによって作成された (より正確にはリンクされた) プログラムのコマンドラインの両方で、Unix のようなファイル名が必要になります。
ただし、「MinGW」ツールは他の Windows プログラムと同様に動作し、「fopen」などの関数が「c:\somedir\somefile」などの「通常の」Windows に似たファイル名を期待する通常の Windows ライブラリを使用します。「MinGW」GCC コンパイラによってビルドされたプログラムは、Microsoft コンパイラによってビルドされたプログラムのように動作します。
Linux とは異なり、Windows にはヘッダー ファイルは付属していませんが、Microsoft からダウンロード (> 1GiB) する必要がある Win32 API が付属しています。MinGW と Cygwin は、Microsoft のものとほぼ互換性のある独自のヘッダー ファイルをいくつか提供しているため、Win32 API をダウンロードする必要はありません。
Windows のほとんどの開発ツールは、同じオブジェクトおよび静的ライブラリ ファイル形式を使用します。("Watcom" コンパイラは数少ない例外の 1 つです。) これは、異なるコンパイラでコンパイルされたオブジェクトと静的ライブラリ ファイルを混在させることができることを意味します。(DLL に対する動的リンクに使用される .lib/.a スタブ ライブラリの形式は、gcc と Microsoft の間で異なるため、それらを混在させることはできません!)
他の回答へのコメントについて:
- MinGW は通常、Windows に付属の「msvcrt.dll」にリンクしています。このファイルには、「printf()」などの標準 C 関数が含まれています。
- Microsoft Visual C++ は、「msvcrt.dll」にリンクすることもあれば、「msvcr100.dll」などの一部の DLL にリンクすることもあります。「msvcr100.dll」には標準の C 関数も含まれていますが、一部の機能は強化されています (Unicode など)。「msvcr100.dll」は Windows に付属していないため、後からインストールする必要があります。
- Cygwin は、標準 C 関数の Cygwin バリアント (ファイル名の処理が異なります) を含む「cygwin1.dll」などのファイルにリンクしています。言うまでもなく、このファイルは Windows には付属していませんが、後でインストールする必要があります。
Linux の "libc" とは異なり、これらの DLL はすべてオペレーティング システムを直接呼び出すのではなく、オペレーティング システムを呼び出す低レベル関数 ("WriteFile()" など) を含む "kernel32.dll" を呼び出します。