[解決済み] 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フォルダの欠落
-
[解決済み】Npm root/administratorでこのコマンドを再度使用してみてください。
-
[解決済み] Npm このコマンドを root/administrator で再使用してください。
-
[解決済み] PowerShell フォルダ権限エラー - 一部またはすべての ID 参照を変換できませんでした。
-
[解決済み] wampでApacheが起動しない
-
[解決済み] Sudoが見つかりません。npm install を試しています。
-
[解決済み] mingw-w64スレッド:PosixとWin32の比較
-
[解決済み] セットの/pはどういう意味ですか?
-
[解決済み] Windowsコマンドプロンプトのエイリアス
-
[解決済み] 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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] UnicodeDecodeError: 'charmap' コーデックは、位置YのバイトXをデコードできません:文字は<undefined>にマップされます。
-
[解決済み] PowerShell フォルダ権限エラー - 一部またはすべての ID 参照を変換できませんでした。
-
[解決済み] 200 PORT コマンドが成功しました。PASVの使用を検討してください。425 接続の確立に失敗しました。
-
[解決済み] ssh_dispatch_run_fatal:message authentication code incorrect unable to ssh jupyter notebook on remote server.入力のMACが破損している。
-
[解決済み] PowerShellでTAB文字を入力するには?
-
[解決済み] Windowsでgl3wを設定するには?
-
[解決済み] ファイルパスの前に付ける「୧⃛(๑⃙⃘◡̈๑⃙⃘)୨⃛」は何ですか?
-
[解決済み] cmd lineを使用してファイルをZIPする方法は?
-
[解決済み] Windowsコマンドプロンプトのログをファイルに保存する
-
[解決済み] XCOPYです。BATCHでプロンプトを出さずに全てを上書きする