[解決済み] CygwinとMinGWの違いは何ですか?
質問
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コンパイラとツールで直接コンパイルすることが多いでしょう。
関連
-
[解決済み】バッチ内のファイル名、ディレクトリ名、またはボリュームラベルの構文が正しくない
-
[解決済み】mavenの.m2フォルダの欠落
-
[解決済み] Ctrl Alt F8はディスプレイを切り離す?
-
[解決済み] コマンドプロンプトから sqlite - 認識されないコマンド
-
[解決済み] 設定ファイルを開くことができません。Windowsの/usr/local/ssl/openssl.cnf [重複] を開くことができません。
-
Windowsはプリンタに接続できません、操作は失敗しました、エラー0x0000011b、解決策の1つです。
-
[解決済み] mingw-w64スレッド:PosixとWin32の比較
-
[解決済み] セットの/pはどういう意味ですか?
-
[解決済み] Windows CLIでタイムスタンプを使ったPingを打つ
-
[解決済み] Windows で Git を使用するためのエディタを設定するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] PowerShell フォルダ権限エラー - 一部またはすべての ID 参照を変換できませんでした。
-
[解決済み] .batファイルのアイコンをプログラムで変更するには?
-
[解決済み] 0|%0とは何ですか、どのように機能しますか?
-
[解決済み] C:\WINDOWS ASSEMBLYの中にあるものは何?[閉店]
-
[解決済み] XAMPP Object not foundエラー
-
[解決済み] docker-machine: マシン名がない、"default" が存在しない
-
[解決済み] Windowsでgl3wを設定するには?
-
[解決済み] Windows用の堅牢で最小限のインストーラーを作成するには?[クローズド]
-
[解決済み] CMDでPowerShellを実行する方法
-
[解決済み] XCOPYです。BATCHでプロンプトを出さずに全てを上書きする