web-dev-qa-db-ja.com

MinGWとは何かの簡単な説明

私は熱心なPython=ユーザーであり、一部のライブラリをコンパイルするには、WindowsマシンにMinGWをインストールする必要があるようです。MinGWとGCCについて少し混乱しています。ここに私の質問(実際のダミーの観点から):

Pythonは解釈とコンパイルの両方を行う言語です。LinuxとWindowsにはPythonの実装があり、バイナリをインストールしてバイナリを使用してコードを実行します。これらには、使用可能な組み込みライブラリがバンドルされています。これは、私が読んだRubyと同じです。

今、私はCのほんの少しをやったし、それをコンパイルする必要があることを知っている。それはあなたが使用できるヘッダーファイルと呼ばれるように見えるその組み込みライブラリを持っています。さて、学生時代に戻って、CはviのようなIDEと呼ばれるTurbo-Cでコードを記述し、F9を押してコンパイルしました。これで、私のC教育は終了です。

MinGWとは何ですか?GCCとは何ですか?私は主にWindowsシステムで作業しており、最近でもCygwinの使用を開始しています。彼らは同じではありませんか?

これらの領域に当てはまる簡単な説明が役立つでしょう。

(この投稿がばかげている/ばかげているように思えますが、お詫びします。ここで質問したいと思いました。これらのコアビットを無視すると、誰も優れたプログラマーになることができませんでした。)

みんな、ありがとう。

40

MinGWは、msvcrt.dllのWindows OSコンポーネントCランタイムライブラリをコンパイルしてリンクするWindowsプラットフォーム用の完全なGCCツールチェーン(C、C++、Ada、Goなどのフロントエンドを6つ含む)です。むしろminimal(つまり名前)であるように試みます。

つまり、Cygwin以外では、MinGW しないは、Windowsの上に完全なPOSIXレイヤーを提供しようとしますが、その一方で、特別な互換性ライブラリとリンクする必要はありません。
したがって、しないは、作成するプログラムにGPLライセンスの影響があります(注目すべき例外:プロファイリングライブラリ、ただし通常はそれらを配布しないため、重要ではありません)。

新しいMinGW-w64には、x99のサポートと実験的なARM実装を含む)が約99%完全なWindows APIバインディング(ATLなどを除く)が付属しています。 99%の人が99%の時間を使用していますが、まったく問題なく動作しています。

Windowsで何らかの形で実装されている限り、POSIXの大部分を使用することもできます。 MinGWで動作しないPOSIXの主要な機能の1つはforkです。これは、単にWindowsにはそのような機能がないためです(Cygwinは実装に多くの苦労をします)。
他にもいくつかのマイナーなものがありますが、結局のところ、ほとんどのものはとにかく機能します。

したがって、非常に非常に単純化された文で:MinGW(-w64)は、CおよびC++だけでなく他の言語でも、Windows用のネイティブバイナリ実行可能ファイルを作成できる「飾り気のないコンパイラ」です。

27
Damon

Cプログラムをコンパイルするには、特定のコンピューターにC実装が必要です。

Cの実装は、基本的に、コンパイラー(そのプリプロセッサーとヘッダー)とライブラリー(既製の実行可能コード)で構成されています。

Windowsがインストールされているコンピューターでは、ほとんどの既製の実行可能コードを含むライブラリーはgccコンパイラーと互換性がありません。そのため、このコンパイラーをWindowsで使用するには、別のライブラリーが必要です:MinGW入ります。 MinGWは、とりわけ、gccとともにC実装を作成するために必要なライブラリを提供します。


WindowsライブラリとMSVCの組み合わせにより、異なる実装が行われます

13
pmg

MinGWは、ほとんどのGNU gccやmake on windowsなどのビルドユーティリティの実装ですが、gccはコンパイラにすぎません。Cygwinは非常に大きく洗練されたパッケージであり、 MinGW。

4
Fran Borcic

MinGWは(特に)GCCを含む開発ツールのスイートであり、GCCはそのスイート内のCコンパイラです。

3
MVS

MinGWが存在する唯一の理由は、ネイティブのWindowsツールを使用できない開発者にLinuxのような環境を提供することです。これは、Win32/Win64プラットフォームのMicrosoftトゥールチェーンに比べてほとんどすべての点で劣っていますが、Linux開発者が新しいことを学ぶ必要がなく、ほとんど変更なしでLinuxコードをコンパイルできる環境を提供します。それは疑わしいアプローチですが、多くの人々は開発のその他の側面よりも利便性が重要であると感じています。以前の回答で示したように、CまたはC++とは関係なく、開発者が望む環境とすべて関係があります。 GNU= Windows上のツールチェーンとその必要性に関する議論、それはまさにそれです-議論

GCC-unix/linuxコンパイラー、MinGW-Windows環境でのGCCの近似、MicrosoftコンパイラーおよびIntelコンパイラー-名前が示唆するものと同じ(どちらもWindowsでMinGWよりもはるかに優れたプログラムを生成する)

1
Real Name