1. ホーム
  2. windows

[解決済み] CygwinとMinGWの違いは何ですか?

2022-03-10 12:38:59

質問

C++のプロジェクトをクロスプラットフォーム化したいのですが、Cygwin/MinGWの利用を検討しています。 しかし、両者の違いは何ですか?

もう一つの疑問は、Cygwin/MinGWがないシステムでバイナリを実行できるかどうか?

解決方法は?

簡略化すると、こんな感じです。

  • Cygwinで何かをコンパイルしていると Cygwin用 .

  • MinGWで何かをコンパイルしていると Windows用 .

Cygwinについて

Cygwin は、単純な Unix ベースのアプリケーションを Windows に簡単に移植できるようにする互換性レイヤで、パイプ、Unix スタイルのファイルおよびディレクトリアクセスなど、Unix ベースのオペレーティングシステムが提供する多くの基本インターフェイスをエミュレートします。 POSIX 規格に準拠しています。 これらのインターフェイスを使用する既存のソースコードがあれば、ほとんど、あるいは全く変更することなく、Cygwinで使用するためにコンパイルすることができるかもしれません。

ソフトウェアを配布する場合、受信者はCygwinのランタイム環境(ファイル cygwin1.dll ). これをあなたのソフトウェアと一緒に配布することは可能ですが、あなたのソフトウェアはそのオープンソースライセンスに従わなければなりません。 あなたのソフトウェアをそれとリンクさせ、DLLを別々に配布するだけでも、あなたのコードにライセンスの制限を課すことができます。

MinGWについて

MinGWは、GNUの開発ツールをWindows向けに移植することだけを目的としています。 Windowsでネイティブに使えるGNU Compiler Collection、GNU Binutils、GNU Debuggerを提供する以外、Unixとのエミュレーションや包括的な互換性を提供しようとはしていません。 また、WindowsのネイティブAPIをコードで使用できるようにするためのヘッダーファイルも含まれています。

その結果、アプリケーションはWindows APIを使用してWindows用に特別にプログラムされる必要があり、標準的なUnix環境での実行に依存しUnix固有の機能を使用して作成された場合は、大幅な変更を意味する場合があります。 デフォルトでは、MinGWのGCCでコンパイルされたコードは、.exeと.dllファイルを含むネイティブのWindows X86ターゲットにコンパイルされますが、基本的にGNUコンパイラツール群を使うので、正しい設定でクロスコンパイルも可能です。

MinGWはフリーでオープンソースの代替品です。 Microsoft Visual C++ コンパイラとそれに関連するリンク/メイクツールは Windows 上で動作します。 Microsoft Visual C++でのコンパイルを想定したものを、あまり手を加えずにMinGWでコンパイルできる場合があります。

MingW には、あなたのコードが Windows API と相互作用することを可能にするいくつかのヘッダーファイルとインターフェースコードが含まれていますが、通常の標準ライブラリと同様に、これはあなたが作成したソフトウェアにライセンス制限を課すものではありません。

その他の注意事項

グラフィカルインターフェースやマルチメディア、システム上のデバイスにアクセスするような、自明ではないソフトウェアアプリケーションの場合、Cygwinができることの境界を離れ、コードをクロスプラットフォーム化するためにさらなる作業が必要になります。 しかし、クロスプラットフォームツールキットやフレームワークを使用することで、この作業を簡略化することができ、一度コーディングすれば、どのプラットフォームでもコードを正常にコンパイルできるようになります。 最初からこのようなフレームワークを使用していれば、他のプラットフォームに移植するときの頭痛の種を減らせるだけでなく、GUIアプリを書いている場合は、すべてのプラットフォームで同じグラフィックウィジェット(ウィンドウ、メニュー、コントロール)を使用し、ユーザーにはネイティブに見えるようにすることが可能です。

例えば、オープンソースの Qtフレームワーク は、人気のある包括的なクロスプラットフォーム開発フレームワークで、ウィンドウズを含むオペレーティングシステム全体で動作するグラフィカルアプリケーションを構築することができます。 このようなフレームワークは他にもあります。 大規模なフレームワークに加えて、複数のプラットフォームをサポートする、より専門的なソフトウェア・ライブラリが何千と存在し、異なるプラットフォーム用に異なるコードを書く心配が少なくなっています。

最初からクロスプラットフォームのソフトウェアを開発する場合、通常、Cygwinを使う理由はないでしょう。 Windowsでコンパイルする場合、通常、MingWかMicrosoft Visual C/C++のどちらか、または両方でコンパイルできるコードを作ることを目指します。 Linux/*nixでコンパイルする場合は、GNUコンパイラとツールで直接コンパイルすることが多いでしょう。