見出し画像

🛠️windowsでlinux CygwinとMinGWの違いは、直接win-api呼んでるのがmingwでランタイムあるのがcygwin

Cygwin間にランタイムが入っている一長一短

CygwinはWindows上で完全なUNIX環境をエミュレートすることを目指しています。Cygwinを使用すると、UNIXやLinuxで動作するプログラムをほとんど変更せずにWindows上で動作させることができます。CygwinのライブラリがWindowsのAPI呼び出しをUNIXのシステムコールに変換することでこれが可能になります。
しかし、その一方で、Cygwinで作成されたバイナリはCygwinのランタイムライブラリがないと動作しません。したがって、CygwinでコンパイルされたプログラムはCygwinがインストールされたマシンでしか動かすことができません。


MinGW (Minimalist GNU for Windows)は直でwinapi動かすまたそれも一長一短

MinGWはWindows用のGCC(GNU Compiler Collection)を提供します。MinGWを使用すると、Windows環境でUNIXライクな開発が可能になりますが、Cygwinとは異なり、WindowsのAPIとMSVCRT(Microsoft Visual C Runtime)を直接使用します。そのため、MinGWでコンパイルされたプログラムは、MinGW環境外でもWindowsなら動作します。
MinGWはUNIXの全ての機能を提供するわけではありませんが、その分、より軽量で、ネイティブのWindowsアプリケーションの開発に適しています。
つまり、CygwinはWindows上でUNIXライクな環境を可能な限り再現することを目指し、一方MinGWはWindowsのアプリケーションを作ることを目指しています


https://amzn.to/43lGIdW

互換性の問題: Cygwinでコンパイルされたプログラムは、Cygwin環境でしか動作しません。一方、MinGWでコンパイルされたプログラムは、Windowsのネイティブなアプリケーションとして動作します。このため、CygwinとMinGWでコンパイルされたプログラム間で、互換性の問題が生じる可能性があります。

  1. パスの問題: Cygwinは、WindowsのパスをPOSIX風のパスに変換します。一方、MinGWは、Windowsのパスをそのまま使用します。このため、パスの扱い方が異なるため、問題が生じる可能性があります。

  2. ランタイムの問題: CygwinとMinGWは、それぞれ異なるランタイムを使用します。そのため、ランタイムの競合が発生する可能性があります。

Cygwin: Cygwinは、Windows上でUNIX/Linuxアプリケーションを実行するための、POSIX互換層を提供します。Cygwinは、Windows APIとPOSIX API間の変換を行うためのDLL(cygwin1.dll)を提供しています。このため、Cygwinでコンパイルされたプログラムは、Cygwin環境以外では実行できません。

MinGW (Minimalist GNU for Windows): MinGWは、Windowsのネイティブなアプリケーションを作成するためのコンパイラとツールチェーンを提供します。MinGWは、Windows APIを直接使用するため、MinGWでコンパイルされたプログラムは、MinGW環境以外でも実行できます。

Cygwin DLLの最新バージョンは3.4.9です。
Cygwin DLLは現在、Windows 7をはじめとする、最近市販されたすべてのWindows x86_64バージョンで動作します。詳しくはFAQをご覧ください。

https://www.cygwin.com/

Cygwinは、リリースされたすべての最新バージョンのWindows上で動作します。これには、Windows 7、Windows Server 2008 R2、およびそれ以降のすべてのバージョンのWindowsが含まれ、その制限のためWindows Sモードを除き、64ビットのAMD/Intel互換PC上、およびWindows 11を実行しているARM PC上のx64エミュレーション下で動作します。
Cygwinは、基礎となるOSがサポートする範囲内でしか実行できないことに留意してください。このため、CygwinはWindowsのさまざまなバージョンで異なる動作をし、異なる制限を示します。

https://www.cygwin.com/faq.html#faq.what.supported


https://amzn.to/46CA1UC

Mingw-w64はオリジナルのmingw.orgプロジェクトを発展させたもので、Windowsシステム上でGCCコンパイラをサポートするために作られた。64ビットのサポートと新しいAPIを提供するために、2007年にフォークされた。それ以来、広く使われ、配布されるようになった。
開発とコミュニティは非常に活発で、毎月新しい貢献者が現れ、シンプルなインストーラーが歓迎されています。

https://www.mingw-w64.org/

MinGWは以下のようなものを含みます:

  • GCC(GNU Compiler Collection): C、C++、Objective-C、Fortran、Ada、Go、D言語用のコンパイラ。

  • Binutils: アセンブラ、リンカ、その他のツールを含むバイナリユーティリティ。

  • MSYS(Minimal SYStem): オプションのコマンドライン環境で、UNIXスタイルのシェルとツールセットを提供し、開発プロセスをサポートします。

CygwinのメインのDLLの名前はcygwin1.dllです。

CygwinはWindows上でLinuxやUNIX環境をエミュレートするためのツールで、cygwin1.dllはその核心をなす部分で、POSIX API呼び出しをWindows API呼び出しに変換する役割を持っています。

cygwin1.dllに関連するエラーは、いくつかの異なる理由で発生する可能性があります。たとえば、欠陥のあるアプリケーション、cygwin1.dllが削除されたか、間違って配置された、PCに存在する悪意のあるソフトウェアによって破損した、または破損したWindowsレジストリなどです。

最も一般的に発生するエラーメッセージは次のとおりです:

  • cygwin1.dllがコンピュータに見つからないため、プログラムを開始できません。この問題を解決するには、プログラムを再インストールしてください。

  • cygwin1.dllの起動に問題が発生しました。指定されたモジュールが見つかりません。

  • cygwin1.dllの読み込みにエラーが発生しました。指定されたモジュールが見つかりません。

  • cygwin1.dllが見つからなかったため、コードの実行を続行できません。プログラムを再インストールすると、この問題が解決する場合があります。

  • cygwin1.dllはWindows上で実行するように設計されていないか、エラーが含まれています。元のインストールメディアを使用してプログラムを再インストールするか、システム管理者またはソフトウェアベンダーに連絡してサポートを受けてください。

大抵の場合、cygwin1.dllはWindowsシステムフォルダー内にあるため、PC上から正しく再インストールすることで解決します。また、一部のプログラム(特にPCゲーム)では、DLLファイルをゲーム/アプリケーションのインストールフォルダに配置する必要があります。

詳しいインストール方法については、FAQをご覧ください。


お願い致します