web-dev-qa-db-ja.com

WindowsのGCC-WindowsのUbuntu(WSL)、CygWin、MinGWのBash

現在Windows 8.1を使用しており、GCCのインストールを検討していました。これを行う方法は、MinGWとCygWin(最も人気のある)を使用していることがわかりました。今、私はLinux(WSL)のWindowsサブシステムと、Windows 10のWindowsで提供されるBashを思いつきました。

質問1。 Windows 10のBashを介してGCCをインストールできるかどうか、Linuxディストリビューションと同じように機能するかどうか。あなたが 'helloworld.c'ファイルを持っているとしましょう。

>     gcc helloworld.c
$     ./a

bashで出力を取得します( 'helloworld.c'の内容が単純であると仮定します-coutステートメント)

質問2。可能な場合、WindowsでGCCを使用するために推奨される方法はどれですか。つまり、a)MinGWまたはCygWin b)Linux on Windows上のBash。私が読んだことで私が理解したことに基づいて、CygWinとMinGWは、それらで開発されたプログラムにいくつかの依存関係を引き起こします。

質問3。ここまで読んだことがあれば、CygWinとMinGWについての理解のギャップを埋めてください。つまり、アプリケーションの開発ではなく、コードのコンパイルと実行にのみ使用する場合、どちらを使用しても問題ありません。コード(CまたはFORTRANで記述)は、システムに関係なく同じようにコンパイルおよび実行されるので、私は正しいですか?

環境。私は数値計算(計算流体力学)に取り組んでいる学生で、主な仕事はFORTRANでCFDコードを開発して実行することです。私がやりたいのは、Windowsで動作するラップトップで、計算コード(主にFORTRANを使用)で作業することです。現時点では、WindowsやLinux向けのアプリケーションやソフトウェアを開発するつもりはありません。しかし、私はまだ物事がどのように機能し、どちらが最良の選択肢であるかを知りたいです。詳しく説明してください。ありがとうございました。

14
Rithwik

最初の質問に答えるには、はい、WSLでコンパイルできます。

他の質問に答えるために、MinGWを見てみましょう。これは、MinGWのWikipediaエントリが言うことです:

MinGWはCygwinのバージョン1.3.3から分岐されました。[5] CygwinとMinGWの両方を使用してUnixソフトウェアをWindowsに移植できますが、アプローチは異なります。[16] Cygwinは、すべての主要なUnixシステムコールとライブラリの完全な実装を含む完全なPOSIXレイヤーを提供することを目的としています。互換性はパフォーマンスよりも優先されます。一方、MinGWの優先事項は、シンプルさとパフォーマンスです。そのため、fork()、mmap()、ioctl()など、Windows APIを使用して簡単に実装できない特定のPOSIX APIは提供されません。[16] SDL、wxWidgets、Qt、GTK +など、それ自体がMinGWに移植されたクロスプラットフォームライブラリを使用して記述されたアプリケーションは、通常、Cygwinの場合と同じくらい簡単にMinGWでコンパイルできます。

Cygwinで記述されたWindowsプログラムは、コピーレフト互換性DLLの上で実行されます。これは、プログラムのソースコードと共にプログラムと共に配布する必要があります。MinGWベースのプログラムは、MinGWに互換性レイヤーを必要としません。 Windows APIへの直接呼び出しでコンパイルされます。

https://en.wikipedia.org/wiki/MinGW

これは、MinGW Webページ( http://www.mingw.org )のコメントです。

「ミニマリストGNU for Windows」の短縮形であるMinGWは、ネイティブのMicrosoft Windowsアプリケーション用のミニマリスト開発環境です。

MinGWは、ネイティブのMS-Windowsアプリケーションの開発に適しており、サードパーティのCランタイムDLLに依存しない完全なオープンソースプログラミングツールセットを提供します。 (オペレーティングシステムのコンポーネントとして、Microsoft自身が提供する多数のDLLに依存します。これらの中で最も顕著なのは、Microsoft CランタイムライブラリであるMSVCRT.DLLです。さらに、スレッド化されたアプリケーションは、自由に配布可能なスレッドサポートDLLとともに出荷する必要があります。 MinGW自体の一部として提供されます)。

MinGWコンパイラは、Microsoft Cランタイムおよび一部の言語固有のランタイムの機能へのアクセスを提供します。ミニマリストであるMinGWは、MS-WindowsへのPOSIXアプリケーションの配備にPOSIXランタイム環境を提供しようとはしませんし、しようとはしません。このプラットフォームでのPOSIXアプリケーションの配備が必要な場合は、代わりにCygwinを検討してください。

MinGWよりもWSLとCygwinに精通しています。私が知っていることから、MinGWは適度にポータブルで高性能なWindowsバイナリを作成することを目的としていますが、CygwinはUnixユーザー(またはUnix/POSIX用に作成されたアプリケーションを移植したいユーザー)を対象としています。すべてのトリミングが施された窓。あなたが示したように、Cygwinプログラムは、Cygwinをインストールしていない他の人に配布するのが容易ではありませんでした(ライセンスの考慮事項のため、以下のリンクを参照)。 MinGWプログラムは、文書化されていないWindowsネイティブライブラリを使用して、ネイティブWindowsプログラムとして実行されます。 WSLバイナリは、Windowsだけでは実行できません。これらは、WSL環境(または場合によってはネイティブLinuxシステム)でのみ実行されます。 WSLはLinuxカーネル呼び出しをWindowsカーネル呼び出しにマップしますが、CygwinはUnix/Posixライブラリ呼び出しを実装します。 WSLは実際のLinuxディストリビューションに依存して環境を提供しますが、Cygwinは独自の環境に依存します。 (WSLには、再コンパイルせずに既存のバイナリを実行できるという利点があります。)バイナリの配布を計画していないので、これはあまり重要ではないと思います。高性能を求めています。ウィキペディアによると、MinGWはCygwinよりも高いパフォーマンスを発揮しますが、32ビットであるため、アプリケーションに問題がある可能性があります。 MinGWに似た64ビット環境がありますが、それは別のプロジェクトです。

重要な考慮事項は、WindowsコードとUnix/Linux/POSIXコードのどちらを作成するかです。 MinGWは、Windows APIを使用してWindowsアプリケーションを開発するためのものです(ただし、一部の限定的なPOSIXサポートを折りたたむことができます)。 WSLとCygwinは、Unix/Linux/POSIXアプリケーションの開発用です。これは、移植性のために重要です。しかし、あなたが私が思うタイプのプログラム、ほぼすべての単純な計算、および非常に少ない手の込んだI/Oを開発している場合、それは個人の好みまたは利便性にまで要約されるかもしれません。かなり時間がかかる小さな代表的なプログラムを思いついて、それを各環境で実行してみると、どれが最高のパフォーマンスを持つかを見つけることができます。それは私があなた自身の操作の組み合わせに依存すると思うでしょう。

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

15
eewanco