19

私は、Cygwin と MinGW が正確に何であるかを理解しようとしてきましたが、非常に混乱しています。C++ でプログラミングしたい場合、必要なのは C++ コンパイラだけではありませんか? 私が読んだところによると、彼らは Windows で Unix のようなオペレーティング システムを提供しようと努力しているように見えますが、これの重要性はわかりません。つまり、Windows で C++ をネイティブにコンパイルできない理由があるのでしょうか? また、ライブラリが含まれていることも読みました。これは、C++ コア言語が多くの関数をサポートしていないため、非常に一般的なライブラリがmath.h付属しているためですか?

4

2 に答える 2

12

:この回答は網羅的であるとは限りません。イデオロギーの定義から、概念の簡単な理解を提示したいだけです。不正確な言葉の使用は意図的なものです。したがって、OS の達人は、完全な定義を期待しないでください。

違いは、POSIX / UNIX と Windows のルートにあります。

POSIX は、オペレーティング システム用のプログラミング C インターフェイスです (特に、シェルやユーティリティなど)。

Unix およびそれ以降の Linux は、そのようなインターフェイスをそれ自体で実装していますが、Windows はネイティブでは実装していません。オペレーティング システム エンティティ (Win32) を管理する独自の方法があります。Mac OS もそうではありません。

GCC は、POSIX インターフェイスを提供するシステムで一般的なコンパイラ スイートです。

Windows で使用するには、この時点で次の 2 つの方法があります。

  • Windows に POSIX インターフェイスを追加するライブラリ (コードとヘッダー) を追加し (POSIX 呼び出しを Windows 呼び出しに変換)、すべての GNU プログラム (Linux ベース) をそのライブラリを使用するようにコンパイルして移植します。これが Cygwin の機能です。

  • POSIX プログラムを書き直して、POSIX-Windows マッピングに関連するすべてを内部に含め、ネイティブ Windows 実行可能ファイルを生成します。これが MinGW と MSYS の目的です。

ボット方式には長所と短所があります。要するに、Cygwin では、何かが POSIX でコンパイルされる場合、(少なくとも理論上は) Cygwin でコンパイルされます。しかし、その結果、Windows の下で実行される Unix のようなプログラムが作成されます。

MinGW では、(ネイティブの Win32 C インターフェイスを呼び出すことによって) ネイティブの Windows プログラムを作成できますが、Windows に存在しない POSIX 機能を使用してすべてをコンパイルすることはできません。最も明白なケースは、<thread>MinGW の標準インターフェースの欠落と限定的な<locale>サポートです。

于 2013-04-29T08:31:01.330 に答える
12

この説明はすでにどこかで書き留められているに違いありませんが、とにかくここに行きます...

Cygwin は、Win32 API の上に構築された POSIX 互換のランタイムです。それは大部分が準拠した POSIX C ライブラリを提供し、その周りには、Cygwin で実行するように移植された大量の Unix プログラムをインストールできるパッケージ マネージャーを備えた一種の「Cygwin ディストリビューション」があります。これらには、Unix シェル、GCC (Cygwin 用)、X、一連のクロスコンパイラなどが含まれます...

MinGW(-w64) は、無料 (パブリック ドメインと同様) の Win32 ヘッダーとライブラリを提供するプロジェクトです。これは、(古い) Windows SDK のヘッダーとライブラリの無料の代替品と見なすことができます。これらは GCC と組み合わせて使用​​できます。プロジェクトとその他のサード パーティの両方が、Cygwin をまったく必要としない Windows 用のネイティブ GCC ビルドを提供しています。これらのパッケージは、Windows SDK の "完全な" (MinGW(-w64) の完全性の範囲で) 代替品と見なすことができます。

Cygwin は、Cygwin から Win32 へのクロスコンパイラも提供することに注意してください。これらは Cygwin プラットフォームで実行されますが、ネイティブの Win32 実行可能ファイルを生成します。

もう 1 つのプレーヤーである MSYS は、Cygwin の軽量フォークであり、Windows で autotools ビルド スクリプトを実行するための最小限のツールのみを提供します。MSYS は、ネイティブの MinGW(-w64) ツールと組み合わせて使用​​する必要があります。これは Cygwin ではなく、MSYS を簡単に拡張することはできません。

そのため、「MinGW(-w64)」は多くの場合、Free Windows GNU Toolchain (ネイティブまたは Cygwin 上で実行されるクロスコンパイラ) 全体を指しますが、厳密に言えばヘッダーとライブラリのみです。

GCC の C++ コンパイラを使用するには、私のパッケージ ( 32 ビットおよび64 ビットの実行可能ファイルを作成するため) またはmingw-buildsを使用することをお勧めします。または、Cygwin をインストールし、その setup.exe を使用して MinGW-w64 クロス コンパイラをインストールし、そこから使用することもできますが、ビルド スクリプトにほぼ完璧な Unix エミュレーションが必要ない場合は、使用しないことをお勧めします。

編集Win32 サブシステムを回避し、NT カーネルの上に直接構築する、古い Interix という別の代替手段があることを認識している場合と認識していない場合があります。これはWindows Services for Unixまたはとして提供されSubsystem for Unix Applicationsます ( Windows 7およびWindows 8とそれ以前のバージョンの Windows で利用可能)。このソリューションは、Windows Pro/Ultimate バージョンのお客様が利用でき、ネイティブの Unix サポートに最も近いものを提供します。Visual Studio を使用して Unix ソフトウェアをデバッグすることもできます :)

于 2013-04-29T07:36:51.007 に答える