CygwinとMinGWの違いは何ですか?


658

C ++プロジェクトをクロスプラットフォームにしたいので、Cygwin / MinGWの使用を検討しています。しかし、それらの違いは何ですか?

別の質問は、Cygwin / MinGWのないシステムでバイナリを実行できるかどうかです。

回答:


629

簡略化すると、次のようになります。

  • Cygwinでコンパイルすると、Cygwin用にコンパイルされます

  • MinGWで何かをコンパイルすると、Windows用にコンパイルされます

Cygwinについて

Cygwinの目的は、Unixベースのオペレーティングシステムが提供する細かい詳細の多くをエミュレートすることにより、UnixベースのアプリケーションをWindowsに移植しやすくすることであり、POSIX標準で文書化されています。アプリケーションは、パイプ、UnixスタイルのファイルおよびディレクトリアクセスなどのUnix機能を使用でき、Cygwinでコンパイルして、アプリケーションの互換性レイヤーとして機能させることができるため、これらのUnix固有のパラダイムの多くは、引き続き使用されます。

ソフトウェアを配布するとき、受信者はそれをCygwinランタイム環境(ファイルによって提供されるcygwin1.dll)とともに実行する必要があります。これはソフトウェアと一緒に配布できますが、ソフトウェアはオープンソースライセンスに準拠する必要があります。ソフトウェアをリンクするだけで、dllを個別に配布する場合でも、オープンソースライセンスを尊重する必要がある場合もあります。

MinGWについて

MinGWは、GCC、Make、BashなどのGNUコンパイラツールのWindowsへの移植を目的としています。Unixをエミュレートしたり包括的な互換性を提供したりするのではなく、Windowsで GCC(GNUコンパイラー)と他の少数のツールを使用するために最低限必要な環境を提供します。CygwinのようなUnixエミュレーションレイヤーはありませんが、その結果、アプリケーションをWindowsで実行できるように特別にプログラムする必要があります。これは、標準のUnix環境での実行に依存するように作成された場合、大幅な変更を意味する可能性があります。前述のようなUnix固有の機能を使用します。デフォルトでは、MinGWのGCCでコンパイルされたコードは、.exeファイルや.dllファイルを含むネイティブのWindows X86ターゲットにコンパイルされますが、基本的にGNUコンパイラツールスイートを使用しているため、適切な設定でクロスコンパイルすることもできます。

MinGWは基本的に、Microsoft Visual C ++コンパイラとそれに関連するリンク/作成ツールの代替です。場合によっては、MinGWを使用して、Microsoft Visual C ++でのコンパイルを目的としたものを、適切なライブラリを使用してコンパイルしたり、場合によっては他の変更を加えたりしてコンパイルできます。

MinGWには、Windowsオペレーティングシステムと対話するためのいくつかの基本的な標準ライブラリが含まれていますが、GNUコンパイラコレクションに含まれる通常の標準ライブラリと同様に、これらは作成したソフトウェアにライセンス制限を課しません。

重要なソフトウェアアプリケーションの場合、包括的なクロスプラットフォームフレームワークを使用しない限り、それらをクロスプラットフォームにすることは大きな課題になる可能性があります。私がこれを書いた時点で、Qtフレームワークはこの目的で最も人気のあるフレームワークの 1つであり、Windowsを含むオペレーティングシステム全体で動作するグラフィカルアプリケーションの構築を可能にしましたが、他のオプションもあります。最初からこのようなフレームワークを使用すると、別のプラットフォームに移植するときに頭痛を軽減できるだけでなく、すべてのプラットフォームで同じグラフィカルウィジェット(ウィンドウ、メニュー、コントロール)を使用できます。 GUIアプリを使用して、ユーザーにネイティブに表示されるようにします。


43
MinGWに付属するbashは、ネイティブのWindowsプログラムではありません。Cygwin DLLのフォークであるMSYS DLLに依存します。MinGW / MSYSに付属する他の多くのUnixユーティリティについても同じです。MinGW gccは確かにネイティブプログラムです。Makeは、ネイティブバージョンとMSYSバージョンの両方で利用できます。
ak2 2012年

6
速度の違いはありますか?
EKanadily 2014

6
ほとんどの場合、速度の違いは無視できます。違いは、cygwin互換性レイヤーによって提供される抽象化の追加レベルがどれほど遅くなるかにかかっています。I / Oなどに測定可能な影響を与える可能性があります。たとえば、長い間、GitはcygwinのWindowsでのみ実行されていたため、かなり低速でした。繰り返しになりますが、フレームワークを使用してコードを作成する場合、それは抽象化レイヤーでもあり、とにかくいくつかのことを遅くする可能性があります。
thomasrutter 14

28
cygwin用にコンパイルされたコードは依然としてネイティブコードです。Javaなどのインタープリターを実行する必要はありません。ディスクやファイルなどの特定のOS機能とやり取りする必要がある場合は、別のレイヤーを通過するだけです。
thomasrutter 14

4
cygwin用かどうかに応じて異なる方法でコードを記述する必要があるため、一般的には比較できません。"hello world"のような小さくて単純なソフトウェアの場合、cygwinランタイムライブラリがあるために、同等のcygwinは大きくなります。cygwinランタイムライブラリのサイズを数えないと、通常はcygwinのバージョンが小さくなりますが、これは誤りの数字です。ライブラリは実際には常にソフトウェアとともに提供する必要があるためです。とはいえ、重要なライブラリ/フレームワークを使用している場合は、その依存度が高くなります。
thomasrutter 14

311

Cygwinは、Windows上で完全なUNIX / POSIX環境を作成する試みです。これを行うには、さまざまなDLLを使用します。これらのDLLはGPLv3 +でカバーされていますが、それらのライセンスには派生作業をGPLv3 +でカバーすることを強制しない例外が含まれています。MinGWは、このようなDLLに依存することなくWindows実行可能ファイルを作成できるC / C ++コンパイラスイートです。通常のMicrosoft Windowsインストールの一部である通常のMSVCランタイムのみが必要です。

MSYSと呼ばれるMinGWでコンパイルされた小さなUNIX / POSIXのような環境を取得することもできます。Cygwinのすべての機能の近くにはありませんが、MinGWを使用したいプログラマーにとって理想的です。


59
しかし、無料の非GPLソフトウェアをリリースしたい場合はどうなりますか?すみません、私はGPLのファンではありません。

19
@ダンMinGWが使用するランタイムを再配布する必要はありません。これはWindowsの一部です。

14
@ ak2:それは本当ですが、誤解を招きます。cygwyn gcc + cygwin環境では、デフォルトで(GPL)cygwin dllにリンクされたバイナリが生成されます。mingw + msysはデフォルトで、プラットフォームC libにリンクされたバイナリを生成します。
Sean McMillan

4
@DanMouldingマイクロソフトのファンではない場合、そもそもWindows向けに開発するためにそれらの感情を無視する必要があります。;-)
Arda Xi

14
@anon「しかし、GPL以外の無料ソフトウェアをリリースしたい場合」.. cygwinのライセンス条項には特別な例外があり、他の(GPL以外の)オープンソースライセンスにリンクされたフリーソフトウェアを配布できます。こちらの「オープンソースライセンス例外」を参照してください:cygwin.com/licensing.html
steve cook

138

他の回答に追加するために、CygwinにはMinGWライブラリとヘッダーが付属しており、gccで-mno-cygwinフラグを使用してcygwin1.dllにリンクせずにコンパイルできます。プレーンなMinGWとMSYSを使用するよりも、これを非常に好みます。


31
これはcygwin 1.7.6では機能しなくなりました。gcc:-mno-cygwinフラグが削除されました。mingwをターゲットにしたクロスコンパイラを使用します。
sigjuice 2010

2
@sigjuice:true、ただし古い-mno-cygwinフラグはGCC 3.xでも機能します:gcc-3 -mno-cygwin
Amro

1
これは、cygwinホストからmingwターゲットにコンパイルするために、mingwの公式サイトからmingwライブラリをダウンロードする必要があることを意味しますか?または、これらのライブラリをCygwinのパッケージシステムからダウンロードできますか?
CMCDragonkai 2015

5
@CMCDragonkaiセットアップユーティリティを実行してそれらを見つけてチェックすることで、Cygwinサイトからmingw互換コンパイラを取得できます。したがって、gccがmingw互換コードを生成しなくなったとしても、Cygwin内で「mingw-gcc」(フルネームではない)を実行して、msysでmingwコンパイラが実行するのと同じ種類の実行可能ファイルを作成できます。
カーディフスペースマン

9
カーディフの有益な返答を修正するために、CygwinのMinGWパッケージとコマンドにはややあいまいな名前があります。MinGW-64をインストールする(最近は常に必要な機能です)には、mingw64-x86_64-gcc-coreCygwinパッケージをインストールします。MinGW-64は、厄介な名前のx86_64-w64-mingw32-gccコマンドとして使用できるようになります。神を喜ばせてください、誰かがすでにこれらの血のようなものの名前を統一しています
Cecil Curry、

60

ウィキペディアはここで比較を行います

Cygwinのウェブサイトから:

  • Cygwinは、Windows用のLinuxのような環境です。これは2つの部分で構成されています。実質的なLinux API機能を提供するLinux APIエミュレーションレイヤーとして機能するDLL(cygwin1.dll)。
  • Linuxのルックアンドフィールを提供するツールのコレクション。

Mingwのウェブサイトから:

MinGW( "Minimalistic GNU for Windows")は、自由に利用可能で自由に配布可能なWindows固有のヘッダーファイルとインポートライブラリのコレクションであり、GNUツールセットと組み合わせて、サードパーティのCランタイムDLLに依存しないネイティブWindowsプログラムを生成できます。


47

CygwinはDLL、cygwin.dll(またはDLLセット)を使用して、WindowsでPOSIXのようなランタイムを提供します。

MinGWはネイティブWin32アプリケーションにコンパイルされます。

Cygwinで何かを構築する場合、それをインストールするすべてのシステムでもCygwin DLLが必要になります。MinGWアプリケーションは特別なランタイムを必要としません。


42

これらの回答された質問を読んで、CygwinとMinGWの違いを理解してください。


質問1:ソースコードを1回記述し、それを1回コンパイルして、任意のプラットフォーム(Windows、Linux、Mac OS Xなど)で実行するアプリケーションを作成したい。

回答#1:ソースコードをJAVAで記述します。ソースコードを1回コンパイルして、どこでも実行します。


質問2:ソースコードを1度だけ作成するアプリケーションを作成したいのですが、任意のプラットフォーム(Windows、Linux、Mac OS Xなど)のソースコードを個別にコンパイルしても問題はありません。

回答#2:ソースコードをCまたはC ++で記述します。標準のヘッダーファイルのみを使用します。任意のプラットフォームに適したコンパイラーを使用します(例:Visual Studio for Windows、GCC for LinuxおよびXCode for Mac)。すべてのプラットフォームでソースコードを正常にコンパイルするために、高度なプログラミング機能を使用しないでください。CまたはC ++の標準クラスまたは関数をまったく使用しない場合、ソースコードは他のプラットフォームでコンパイルされません。


質問#3:質問#2の回答で、プラットフォームごとに異なるコンパイラを使用することは困難です。クロスプラットフォームコンパイラはありますか?

回答#3:はい、GCCコンパイラを使用します。クロスプラットフォームコンパイラです。Windowsでソースコードをコンパイルするには、Windows用のGCCコンパイラを提供し、ソースコードをネイティブのWindowsプログラムにコンパイルするMinGWを使用します。すべてのプラットフォームでソースコードを正常にコンパイルするために、高度なプログラミング機能(Windows APIなど)を使用しないでください。Windows API関数を使用する場合、ソースコードは他のプラットフォームでコンパイルされません。


質問4:CまたはC ++標準ヘッダーファイルは、マルチスレッドのような高度なプログラミング機能を提供しません。私に何ができる?

回答#4:POSIX(Portable Operating System Interface [for UNIX])標準を使用する必要があります。多くの高度なプログラミング機能とツールを提供します。完全または部分的にPOSIX互換の多くのオペレーティングシステム(Mac OS X、Solaris、BSD / OSなど)。一部のオペレーティングシステムは、POSIX互換として公式に認定されていませんが、大部分は準拠しています(Linux、FreeBSD、OpenSolarisなど)。Cygwinは、Microsoft Windows向けの大部分がPOSIX準拠の開発およびランタイム環境を提供します。


したがって:

WindowsでGCCクロスプラットフォームコンパイラの利点を使用するには、MinGWを使用します。

WindowsでPOSIX標準の高度なプログラミング機能とツールの利点を使用するには、Cygwinを使用します。


4
あなたの小さなFAQについて:1)あなたの権利、どこでも実行され、コンパイルする必要がないものが必要な場合は、javaのようなものを選択してください(また、python、perl、ruby、および残りのスクリプト言語を忘れないでください)2) Cのすべてのコンパイラはそれを非常によくサポートしているため、これはCの場合には少し間違っています。3)win32 apiは引き続き使用できますが、移植性レイヤーでラップする必要があるため、これは設計上の問題にすぎません。
Coyote21、2011

1
4)POSIXは他のapiにすぎないため、上記で説明した理由により、これは完全に間違っています。また、多くのPOSIXを防御する場合、Unicesでも同じPOSIXセットを実装する必要がないことを知っておく必要があります。あなたはそれに対処しますか?リアルタイムPOSIX APIが思い浮かびます。そして、それはあなたに完全に偽りで間違った結論をもたらします、あなたはウィンドウで何かのためにPOSIXを必要としないので、あなたはただWin32 APIを使うことができます。または、Qt、GTK、およびWxWidgetsがクロスプラットフォームになる方法を見つけたと思いますか。それらはすべて、ウィンドウでcygwinを使用する必要があると思います。回答に-1票投票してください。
Coyote21

4
@ Coyote21、あなたの主張は理解できません。POSIXはクロスプラットフォーム開発には適さないと言っていますか?複数のプラットフォーム用のC / C ++でコードを記述する唯一の適切な方法は、サポートするプラットフォームごとに独自の互換性レイヤーを記述することだと言っていますか?POSIXから始めるという提案に問題はないと思います。あなたはそれがあなたをどこまで到達できるか、そして広範な互換性レイヤーソリューションが必要になるかどうかを見る必要があります。大きな互換性レイヤーは標準ではありません。そうでなければ、POSIXは完全な失敗だと主張することです。
David Gladfelter、2012年

マルチスレッドは、MinGWでもPOSIXレイヤーを介して実装されます。
Alexander Shishenko 2016年

1
「すべてのプラットフォームでソースコードを正常にコンパイルするために、高度なプログラミング機能を使用しないでください。」「高度なプログラミング機能」が何を意味するのかを明確にする必要があります。後の行に基づいて、私の推測では、実際にはプラットフォーム固有の機能を意味していると思います。「すべての[主要な]プラットフォーム」向けの有能なコンパイラーが存在するため、現代の言語機能を意味するのであれば、違います。コンパイラーやライブラリーがまだ遅れている機能をサポートするためだけに機能を奪うべきではありません。まともなコンパイラー、標準のC / ++、およびクロスプラットフォームのライブラリーを使用して、私たちは十分に進歩することができます。
underscore_d

34

Cプログラムの移植の観点から、これを理解する良い方法は例をとることです:

#include <sys/stat.h>
#include <stdlib.h>

int main(void)
{
   struct stat stbuf;
   stat("c:foo.txt", &stbuf);
   system("command");
   printf("Hello, World\n");
   return 0;
}

に変更statすると_stat、このプログラムをMicrosoft Visual Cでコンパイルできます。このプログラムは、MinGWおよびCygwinでもコンパイルできます。

Microsoft Visual Cでは、プログラムはMSVC再頒布可能ランタイムライブラリにリンクされます。mxvcrtnn.dllここで、nnはいくつかのバージョンサフィックスです。このプログラムを出荷するには、そのDLLを含める必要があります。そのDLLは_statsystemおよびを提供しますprintf。(ランタイムを静的にリンクするオプションもあります。)

MinGWでは、プログラムはにリンクされますmsvcrt.dll。これは、Windowsの一部であり、ドキュメント化されておらず、バージョン管理されていないライブラリであり、アプリケーションの使用が制限されています。そのライブラリは基本的に、Windows自体で使用するためのMS Visual Cの再配布可能なランタイムライブラリのフォークです。

これらの両方の下で、プログラムは同様の動作をします:

  • このstat関数は、非常に限定された情報を返します。たとえば、有効な権限やiノード番号はありません。
  • パス c:file.txtは、driveに関連付けられている現在の作業ディレクトリに従って解決されc:ます。
  • systemcmd.exe /c外部コマンドの実行に使用します。

Cygwinでプログラムをコンパイルすることもできます。MS Visual Cで使用される再配布可能なランタイムと同様に、CygwinプログラムはCygwinのランタイムライブラリにリンクされます:cygwin1.dll(Cygwin本体)およびcyggcc_s-1.dll(GCCランタイムサポート)。Cygwinは現在LGPLの下にあるため、GPL互換のフリーソフトウェアでなくても、プログラムとともにパッケージ化してプログラムを出荷できます。

Cygwinでは、ライブラリ関数の動作が異なります。

  • このstat関数には豊富な機能があり、ほとんどのフィールドで意味のある値を返します。
  • パス c:file.txtc:後にスラッシュが付いていないはドライブ文字参照を含んでいるとはまったく理解されていません。コロンは名前の一部と見なされ、どういうわけかそれを壊されます。Cygwinのボリュームまたはドライブに対する相対パスの概念、「現在のログに記録されたドライブ」の概念、およびドライブごとの現在の作業ディレクトリはありません。
  • system関数は、使用しようと/bin/sh -c通訳を。Cygwinは/、実行可能ファイルの場所に従ってパスを解決し、sh.exeプログラムが実行可能ファイルと同じ場所に配置されることを期待します。

CygwinとMinGWの両方で、Win32関数を使用できます。MessageBoxまたはを呼び出したい場合はCreateProcess、それを行うことができます。また、コンソールウィンドウを必要としないプログラムを簡単に構築できます。gcc -mwindows、MinGWとCygwin、ます。

Cygwinは厳密にはPOSIXではありません。Windows APIへのアクセスを提供することに加えて、それはいくつかのMicrosoft C関数の独自の実装も提供します(中にあるもの、msvcrt.dllまたは再配布可能なmsvcrtnn.dllランタイム)。この例は、のspawn*ような関数のファミリーですspawnvp。これらは、Cygwinの代わりに、forkおよびexecCygwin で使用することをお勧めしますfork。これは、の概念を持たないWindowsプロセス作成モデルにより適切にマッピングされるためです。

したがって:

  • Cygwinプログラムは、ライブラリの伴奏を必要とするという理由で、MS Visual Cプログラムと同じように「ネイティブ」です。Windowsでのプログラミング言語の実装は、C言語の実装でさえ、独自のランタイムを提供することが期待されています。Windowsには一般向けの「libc」はありません。

  • MinGWがサードパーティのDLLを必要としないという事実は、実際には不利です。これは、ドキュメント化されていないWindows内部のVisual Cランタイムのフォークに依存しています。これは、GPLシステムライブラリの例外がに適用されるためですmsvcrt.dll。これは、GPLでコンパイルされたプログラムをMinGWでコンパイルおよび再配布できることを意味します。

  • msvcrt.dllCygwinは、に比べてPOSIXのサポートがはるかに広くて深いため、POSIXプログラムを移植するための優れた環境です。現在はLGPLの下にあるため、オープンソースまたはクローズドソースのすべての種類のライセンスを持つアプリケーションを再配布できます。 Cygwinにtermiosは、Microsoftコンソールで動作するVT100エミュレーションとも含まれています。tcsetattrVT100コードを使用してrawモードを設定し、カーソルを制御するPOSIXアプリケーションは、cmd.exeウィンドウ内で正しく動作します。エンドユーザーに関する限り、これはWin32呼び出しを行ってコンソールを制御するネイティブコンソールアプリです。

しかしながら:

  • ネイティブのWindows開発ツールとして、Cygwinには、Windowsにとって外部的なパス処理、ハードコーディングされたパスなどの依存関係など、いくつかの癖が/bin/shあります。これらの違いにより、Cygwinプログラムは「非ネイティブ」になります。プログラムが引数としてパスを受け取るか、ダイアログボックスから入力を受け取る場合、Windowsユーザーは、そのパスが他のWindowsプログラムと同じように機能することを期待します。それがそのように機能しない場合、それは問題です。

プラグイン: LGPLの発表直後に、Cygnal(Cygwin Native Application Library)プロジェクトを開始して、これらの問題の修正を目的としたCygwin DLLのフォークを提供しました。プログラムはCygwinで開発してから、Cygnalバージョンのcygwin1.dll再コンパイルせずに。このライブラリが改善されると、MinGWの必要性が徐々になくなります。

Cygnalがパス処理の問題を解決すると、CygnalのWindowsアプリケーションとして出荷されるときにWindowsパスで動作し、Cygwinの/usr/bin下にインストールされたときにCygwinパスでシームレスに動作する単一の実行可能ファイルを開発することが可能になります。Cygwinでは、実行可能ファイルはのようなパスで透過的に機能します/cygdrive/c/Users/bob。Cygnalバージョンのにリンクしているネイティブデプロイメントではcygwin1.dll、そのパスは意味がありませんが、は理解しc:foo.txtます。


2
すばらしい答えです。3つの環境のそれぞれで同じコードをコンパイル、リンク、実行したときに何が起こるかを示すことが重要であり、違いを明確にします。
drlolly 2017

@カズその開発はどうですか?繰り返しのように聞こえますが、少なくとも1年前から死んでいるようです。人々が助けて参加できるように、なぜGitHubを使用しないのですか?
not2qubit 2018

2
@ not2qubit私が自分で管理している自分のサーバーでプロジェクトをホストしている場合、自分のプロジェクトをよりよく管理できると思います。私はgitを使用しています。リポジトリをプルすることができます。(Linus Torvaldsが設計した)電子メールでプルリクエストを受け入れることができます。また、メンテナレベルの貢献者になる誰かに、コミット権限を持つアカウントを与えることもできます。Cygnalは正常に動作します。TXR言語の新しいリリースのWindowsバージョンに定期的にバンドルしています。2019
Kaz

@ not2qubit Cygnalアジェンダの17の問題すべてが対処されていることに注意してください。新しい要件を提案したり、それらの17の処理方法について不満を言ったりした人はいません。したがって、それほど急を要しない新しいCygwinにリベースすること以外に開発は必要ありません。
Kaz

27

ウィキペディアは言う

MinGWのバージョン1.3.3から分岐しましたCygwin。両方がCygwin とは、MinGWポートに使用することができますUNIXへのソフトウェアWindows、彼らは異なるアプローチがあります。Cygwin目的は完全に提供するために、POSIX layer いくつかのシステムコールと上に存在するライブラリのエミュレーション提供するLinuxUNIXBSDバリアントを。はのPOSIX layer 上で実行されWindows、互換性のために必要な場合はパフォーマンスを犠牲にします。したがって、このアプローチは必要と Windowsして書かれたプログラムCygwin、プログラムのと一緒に、プログラムと一緒に配布されなければならないコピーレフト互換ライブラリーの一番上で実行することをsource codeMinGWdirectを介してネイティブの機能とパフォーマンスを提供することを目的としていますWindows API calls。とは異なり CygwinMinGWは互換性レイヤーDLLを必要としないため、プログラムをとともに配布する必要はありませんsource code

MinGW依存しているWindows API callsため、完全な提供はできませんPOSIX API。でコンパイルUNIX applicationsできるものはコンパイルできませんCygwin。具体的には、これはのPOSIXような機能 を必要とするアプリケーションfork()mmap()またはioctl()での実行が想定される アプリケーションに適用されますPOSIX environment。使って書かれたアプリケーションcross-platform libraryそれ自体はに移植されているMinGWような、SDLwxWidgetsQt、またはGTK+、通常は簡単のようにコンパイルされます MinGW彼らは同じようにCygwin

の組み合わせMinGWMSYS小さな自己完結型の環境を提供します。これは、コンピューターのレジストリーまたはファイルにエントリーを残さずに、リムーバブルメディアにロードできます。Cygwinポータブルにも同様の機能があります。より多くの機能を提供することにより、Cygwin インストールと保守がより複雑になります。

それはすることも可能であるcross-compile Windows applicationsMinGW-GCC under POSIX systems。開発者が使用してWindowsのインストールを必要としないことをこれが意味MSYS上で実行されますコンパイルソフトウェアWindowsなしCygwin


2
間違いなく 「インストールとメンテナンスがもっと複​​雑」ではありませんapt-cygWSLの下でaptを使用するよりもおそらく簡単なので、使用してください。
not2qubit

14

WindowsでUnixアプリケーションをコンパイルするのに役立つAT&TのU / Winソフトウェアを見逃さないでください(最新バージョン-2012-08-06; Eclipse Public License、バージョン1.0を使用)。

Cygwinのように、ライブラリに対して実行する必要があります。彼らの場合POSIX.DLL。AT&Tの人たちは素晴らしいエンジニア(あなたにkshとdotをもたらしたのと同じグループ)であり、彼らのスタッフはチェックする価値があります。


4
うわー、それらはいくつかの悪いウェブページです。ようやくwww2.research.att.com/sw/downloadでダウンロードリンクを見つけることができましたが、プロジェクトに関するオンラインドキュメントや情報はありませんでした。
ファンティウス

1
情報は有用ですが、これはこの質問ではなく、MingWまたはCygwinの代替に関する質問への回答である可能性があると思います。
Vivek 2016年

12

他の答えはすでに目標を達成しています。簡単にキャッチできるようにイラストを追加したいだけです。

ここに画像の説明を入力してください


11

CygwinはPOSIX環境全体をエミュレートしますが、MinGWはコンパイル専用の最小限のツールセットです(ネイティブWinアプリケーションをコンパイルします)。したがって、プロジェクトをクロスプラットフォームにしたい場合、2つの間の選択は明白です、MinGW。

WindowsではVS、Linux / UnicesではGCCの使用を検討する場合があります。ほとんどのオープンソースプロジェクト(FirefoxやPythonなど)がそれを行います。


「最も」は、ここでは意味のないイタチの言葉のように見えます。特に、例が2つだけで統計がありません。多くのFOSSプロジェクトは、VSプロジェクトファイルをトークンジェスチャとしてスローします。より正確であると思います。ただし、過去の経験が問題になる場合は、言語標準が進化するにつれてVSが大幅に遅れる傾向があるため、GCCまたはClangは通常より安全です。
underscore_d

それが2009年の回答です。GCCにとって、今の状況はさらに厳しいものになっています。「ほとんど」については、影響で測定すると、FirefoxとChromeだけで他の何よりも多くのユーザーがいます。
vartec

2
私が答えてから変わったのは、現在clang、実行可能なクロスプラットフォームソリューションであることです。
vartec 2016

9

ユーティリティの動作は2つの間で完全に異なる可能性があることに注意してください。

たとえば、Cygwin tarはfork()がDLLでサポートされているため、forw()をフォークできますが、mingwバージョンではできません。これは、ソースからmysqlをコンパイルしようとするときの問題です。


これが、MSYS2などの完全なMinGW対応環境がCygwinまたは他の完全にPOSIX互換のレイヤーを提供し、構築中に必要なツールチェーンの低レベルのナットとボルトを提供する理由です。その後、実際のコンパイルとリンクは、完全にネイティブなMinGWコンパイラに任されます。MSYS2は本当にすてきです。
underscore_d

9

商用/独自仕様/非オープンソースアプリケーションでCygwinを使用するには、Red Hatからの「ライセンス購入」に数万ドルを支払う必要があります。これは標準のライセンス条項を無効にしますは、かなりのコストでをます。Googleの「cygwinライセンスコスト」と最初のいくつかの結果を確認してください。

mingwの場合、そのようなコストは発生せず、ライセンス(PD、BSD、MIT)は非常に寛容です。せいぜい、あなたかもしれません、mingw64-tdmを使用するときに必要なwinpthreadsライセンスなど、アプリケーションにライセンスの詳細を提供が期待されます。

Izzy Helianthusによる編集: CygwinのwinsupサブディレクトリにあるAPIライブラリが、完全なGPLではなくLGPLで配布されるようになったため、商用ライセンスは利用できなくなりました。


2
Redhat Webサイトからの更新(「ライセンス購入」からのリンク)-'2016年3月1日より、Red HatはCygwinの商用購入ライセンスを販売しなくなりました。Cygwinは現在GNU Lesserの下で配布されているため、商用ライセンスは不要になりました。 GPL(LGPL)。 '> Cygwin Webサイトから。ソースコードのwinsupサブディレクトリにあるCygwin™APIライブラリは、GNU Lesser General Public License(LGPL)バージョン3以降でカバーされています。LGPLv3の要件の詳細については、 GNU Lesser General Public License(LGPL)をお読みください
Izzy Helianthus

6

Cygwinは、Windowsにほぼ完全なPOSIX環境を提供するように設計されています。これには、本格的なLinuxのようなプラットフォームを提供するように設計された広範なツールセットが含まれます。比較すると、MinGWとMSYSは、軽量でシンプルなPOSIXのようなレイヤーgccbash提供します。MinGWのよりミニマリストなアプローチのため、Cygwinが提供するPOSIX APIカバレッジの程度を提供せず、したがって、Cygwinでコンパイルできる特定のプログラムを構築できません。

2つによって生成されたコードに関しては、Cygwinツールチェーンは大規模なランタイムライブラリへの動的リンクに依存していますがcygwin1.dll、MinGWツールチェーンは、WindowsネイティブCライブラリに動的にリンクするmsvcrt.dllとともに、の一部に静的にリンクするバイナリにコードをコンパイルしますglibc。したがって、Cygwin実行可能ファイルはよりコンパクトですが、再配布可能な個別のDLLが必要ですが、MinGWバイナリはスタンドアロンで出荷できますが、大きくなる傾向があります。

Cygwinベースのプログラムを実行するには別のDLLが必要であることも、ライセンスの制限につながります。Cygwinランタイムライブラリは、OSI準拠のライセンスを持つアプリケーションのリンク例外を除き、GPLv3の下でライセンスされます。そのため、Cygwinを中心にクローズドソースアプリケーションを構築する開発者は、Red Hatから商用ライセンスを取得する必要があります。一方、MinGWコードは、ヘッダーとライブラリのライセンスが許可されているため、オープンソースアプリケーションとクローズドソースアプリケーションの両方で使用できます。


3

Cygwinは、Unixに似た環境であり、Microsoft Windowsのコマンドラインインターフェイスです。

Mingwは、Microsoft WindowsへのGNUコンパイラコレクション(GCC)のネイティブソフトウェアポートであり、Windows APIの自由に配布できるインポートライブラリとヘッダーファイルのセットを備えています。MinGWにより、開発者はネイティブのMicrosoft Windowsアプリケーションを作成できます。

必要なすべてのライブラリ(DLL)が存在する場合mingwcygwin環境なしで生成されたバイナリを実行できます。


1

Cygwin互換性レイヤーを使用しますが、MinGWネイティブです。これが主な違いの1つです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.