Mingw-w64

Mingw-w64
作者 Kai Tietz, Jonathan Yong, 多数のGNU貢献者
開発元 OneVision Software
初版 2005年 (19年前) (2005)
最新版
12.0.0 / 2024年5月29日 (3か月前) (2024-05-29)
プログラミング
言語
C言語, C++
対応OS Microsoft Windows, Linux, macOS
前身 MinGW
種別 コンパイラ
ライセンス パブリックドメイン (ヘッダ), GNU General Public License (コンパイラおよびツールチェーン), Zope Public License
公式サイト mingw-w64.org
テンプレートを表示

Mingw-w64Microsoft Windows PEアプリケーションを制作・クロスコンパイルするためのフリーかつオープンソースなソフトウェア開発環境である。 2005–2010年にMinGW (Minimalist GNU for Windows)からフォークされた。

Mingw-w64にはGNUコンパイラコレクション (GCC)の移植、Windows用のGNU Binutils (アセンブラリンカ、アーカイブマネージャ)、自由に配布可能なWindows専用のヘッダファイルWindows APIを利用可能にする静的リンクライブラリ、WindowsネイティブのGNUデバッガ、その他ユーティリティが含まれる。

Mingw-w64はMicrosoft Windowsプラットフォーム上でネイティブに、Linuxや他のUnix系システム上でクロスホストに、もしくはMSYS2またはCygwinにより「クロスネイティブ」に動作する。32ビットまたは64ビットのx86実行ファイルを生成できる。ターゲット名はそれぞれi686-w64-mingw32x86_64-w64-mingw32を使用する。

歴史

2005年 (2005)、MinGWプロジェクトが重要な新しいAPIや64ビットへの対応に向けた更新を行わないことに対し、OneVision Softwareによりクリーンルーム手法の原則に基づき作成された。2008年 (2008)にはオープンソースとして継続することを条件に、主任開発者の一人であるKai Tietzにコードが譲渡された[1]。当初は元のMinGWプロジェクトに対して申し出ていたが、非公開もしくはプロプライエタリな情報が利用されている可能性があるとして拒否された[2][1][3]。さまざまな理由により、Kai TietzはMinGWとの連携を諦めた[4]

MinGW-w64はWin32 APIをより完全に実装する[5]。主な追加項目は以下のとおりである。

  • C99の対応の改善
  • POSIXスレッド (pthreads)に対応し、GCCのlibstdc++のC++11のスレッドに関する機能を有効にすることも可。
  • GCC multilibにより、32ビットと64ビットのライブラリを並列にインストールすることが可能。
  • Unicodeアプリケーション(英語版)のエントリポイント (wmain/wWinMain)
  • DDK (ReactOSより)
  • DirectX (Wineより)
  • Large-file support(英語版)
  • Win64
  • Structured Exception Handling(英語版) - x86-64においてDWARFsjlj(英語版)の代替として、gcc 4.8以降より追加。
  • その他の便利ツール - MinGWのpexportsを改良したgendefや、WineのMIDL(英語版)コンパイラのmidlなど。

また、Mingw-w64プロジェクトではwinpthreadsライブラリも開発する。これはpthreads-win32に似たラッパーライブラリ(英語版)であるが、GCCでこれをスレッドライブラリとして利用することで、動作する<thread><future><mutex>などのC++11のスレッドライブラリを構築できるという特徴をもつ。

MSYS2

MSYS2はMicrosoft Windows向けのソフトウェアの配布・構築環境である。Mingw-w64とCygwinを基盤として、Unix用に書かれたコードをWindowsで利用可能にする補助を行う。MinGWに対するMSYSに値する[6]

Unixのソフトウェア資産をWindowsマシンで利用可能にするプロジェクトは他にCygwinWindows Subsystem for Linux (WSL)が挙げられる。WSLは仮想機械を通してELFバイナリを動作させる。CygwinはWindowsのDLLとしてPOSIX環境を構築し、EXEファイルにコンパイルされたアプリケーションはUnix環境にあるかのように動作する[7]

Cygwinが包括的な環境を提供するのに対し、MSYS2はあくまでWindows上での開発・展開プラットフォームを目標とする[8]

  • 標準のMSYS2環境はパッケージ管理システムとUnixの標準的なシステムツール群を含む。これはCygwinの仮想環境から派生しており、似た働きをもつ。MSYS2自身を管理するときこれを通してでUnixのツール群を変更せずに使用できる。また、この仮想環境にビルドツールをインストールしてネイティブAPIではなくPOSIX互換レイヤーに依存するソフトウェアすることもできる。
  • 上記のもの以外に4つの環境が提供されている。これらは32ビットまたは64ビットのWindowsネイティブのアプリケーションを構築するコンパイラ、ビルドツール、およびライブラリを含む。このうちネイティブな2つで構築されたプログラムは仮想化を全く行わないため、通常のネイティブアプリと同様に配布できる。
    • MINGW64とMINGW32 - gcc, msvcrt, libstdc++を使用する。他の環境の派生元でもある。
    • UCRT64 - MINGW64をucrtを使用するよう変更したもの。
    • CLANG64 - UCRT64をclangおよびlibc++を使用するよう変更したもの。

CygwinもMinGW-w64のコンパイラとライブラリを提供するが、利用可能なライブラリは少なく、プレフィックスもつけられていないため管理が複雑である。

標準のMSYS2環境にはArch Linuxパッケージ管理システムであるPacmanbashシェル、その他のUnixプラグラムが付随している。POSIX実装にはCygwinのcygwin1.dllより派生した20MBほどのランタイムライブラリmsys-2.0.dllを使用する。Cygwinの開発を追うように常に開発が進められている。ソフトウェア開発者がPacmanを使い管理し、各種ツールを実行する開発環境としての機能を期待されている。それに不要と判断された機能は削除されている[8]

Cygwinと同様に、MSYS2の環境から外部のプログラムを呼び出す際にはファイルパスの翻訳を行う。例えば、notepad++ /c/Users/John/file.txtと実行すると、WindowsのパスC:\Users\John\file.txtに変換してエディタを起動する[9][8]

MSYS2とそれに付随するbash環境はGitGNU OctaveのWindows版に利用されている。

コンパイラ

GCCが扱える言語のほとんどはMingw-w64による移植でも対応している (C, C++, Objective-C, Objective-C++, Fortran, Adaなど)。C++ならlibstdc++、Fortranならlibgfortranといった具合にGCCのランタイムライブラリが使用される。また、LLVMを使用するclangもMSYS2を通じて使用できる。ARM版のWindowsにも対応する (aarch64-w64-mingw32およびarmv7-w64-mingw32)[10][11]

Mingw-w64のGCCとVisual Studioなどといったように、異なるC++コンパイラで生成したバイナリ実行ファイルやDLLはABI名前修飾の手法の違いにより、基本的にリンク互換でない。それに対して、C言語で書かれたプログラムはリンク互換である[12]。また、 ClangはMSVCのC++ ABIをサポートしており、例外的に互換性をもつ[13]

Windows固有のフォーマットとそれを扱うためのツールに関してはBinutilsのユーザー文書に最新の情報がある[14][15]

脚注

[脚注の使い方]
  1. ^ a b “(MinGW-w64) History”. MinGW-w64 Wiki. 2019年7月5日時点のオリジナルよりアーカイブ。2016年2月18日閲覧。
  2. ^ Danny Smith (13 August 2007). "Re: Sub project for w64 header & crt". Newsgroup: comp.gnu.mingw.devel. Usenet: 000001c7dd83$9ae74310$fe6d65da@THOMAS. 2020年7月23日閲覧From a cursory spot check of a few files, the crt sources in particular appear to contain too much undocumented material that I suspect may be derived from proprietary sources. I have since avoided looking at the mingw-w64 sources to avoid any taint of copyright abuse. I could well be wrong, but I would rather be safe than jeopardise the future of the mingw32, which has tried to maintain a "clean-room" ethic during its development.
  3. ^ Marshall, Keith (19 July 2009). "Re: Harmonizing mingwrt / w32api with mingw-w64". MinGW-dvlpr (Mailing list). 2020年1月28日時点のオリジナルよりアーカイブ。2014年6月12日閲覧However, we would require a formal audit of mingw-64 code, to ensure conformance with our requirements for truly open documentation of sources, before [merge of mingw-w64] could be completed.
  4. ^ Tietz, Kai (20 July 2014). "Re: Harmonizing mingwrt / w32api with mingw-w64". MinGW-dvlpr (Mailing list). 2020年1月28日時点のオリジナルよりアーカイブ。2014年6月12日閲覧
  5. ^ “MinGW-w64”. MinGW-w64.org. 18 October 2019時点のオリジナルよりアーカイブ。30 May 2013閲覧。
  6. ^ “MSYS2” (英語). www.msys2.org. 2021年2月7日時点のオリジナルよりアーカイブ。2022年9月30日閲覧。
  7. ^ “ZSH on Windows via MSYS2” (26 July 2018). 28 January 2020時点のオリジナルよりアーカイブ。30 January 2020閲覧。
  8. ^ a b c “How does MSYS2 differ from Cygwin · msys2/Msys2 Wiki”. 2023年2月15日時点のオリジナルよりアーカイブ。2023年2月20日閲覧。
  9. ^ Biswas (2017年4月29日). “How to Get an Unix/Linux Environment on Windows with MSYS2” (英語). Boolean World. 2022年9月30日時点のオリジナルよりアーカイブ。2022年9月30日閲覧。
  10. ^ “Package: mingw-w64-x86_64-clang”. MSYS2 Packages. 30 October 2020時点のオリジナルよりアーカイブ。12 February 2020閲覧。
  11. ^ Storsjö (23 April 2020). “mstorsjo/llvm-mingw”. GitHub. 29 November 2020時点のオリジナルよりアーカイブ。27 April 2020閲覧。
  12. ^ “Interoperability of Libraries Created by Different Compiler Brands”. mingw.org. 2020年11月30日時点のオリジナルよりアーカイブ。2022年9月30日閲覧。
  13. ^ “MSVC compatibility”. Clang 11 documentation. 2021年1月26日時点のオリジナルよりアーカイブ。2020年2月12日閲覧。
  14. ^ “ld: win32”. sourceware.org. 2020年2月14日時点のオリジナルよりアーカイブ。2020年2月10日閲覧。
  15. ^ “GNU Binary Utilities Documentation”. sourceware.org. 2020年2月19日時点のオリジナルよりアーカイブ。2020年2月10日閲覧。

関連項目

外部リンク

  • 公式ウェブサイト
  • MSYS2
  • MXE - Makefiles to build MinGW on Unix and many common dependencies libraries targeting Win32/64, pre-built packages available