MinGW-w64 を導入する

no extension

MinGW-w64MinGW (Minimalist GNU for Windows) の後継とも言えるプロジェクトで Windows 用のバイナリを出力可能な GCC を含む開発環境を提供している。 MSYS2MinGW-w64 の成果を取り込んでいるので馴染みのある人もいるだろう1

MinGW および MinGW-w64 はどちらかと言うと Linux 系のプラットフォームで Windows 向けのビルドを行うクロスコンパイラとしての側面が強いが,もちろん Windows 用のバイナリも存在する。 MinGW-w64 の Windows 用インストーラは以下で取得できる2

インストーラを起動すると以下のウィザード画面になる。

Installing Mingw-w64 (1)
Installing Mingw-w64 (1)

このまま [Next >]

Installing Mingw-w64 (2)
Installing Mingw-w64 (2)

この画面でインストールする GCC の種別を指定する。

  • Version : GCC のバージョン。特に理由がない限り最新版でいいだろう(2018-03-31 時点の最新は 7.3.0)
  • Architecture : ターゲットシステムのアーキテクチャ。 i686x86_64 のいずれかを選択する。 x86_64 が64ビット版なのでご注意を
  • Thread : スレッドモデル。 posixwin32 のいずれかを選択する。 win32 は Windows ネイティブ関数を使っていて速いのだが C++ 11 以降の thread, mutex, future が使えなくなる。特に理由がないのであれば posix でいいだろう
  • Exception : 例外処理ハンドリング。アーキテクチャによって以下を選択できる。
    • i686
      • dwarf : DWARF
      • sjlj : SetJump/LongJump
    • x86_64
      • seh : Structured Exception Handling (Windows ネイティブ。おすすめ)
      • sjlj : SetJump/LongJump
  • Build Version : ビルドバージョン。特に理由がなければ最新版でいいだろう

種別を指定したら [Next >]

Installing Mingw-w64 (3)
Installing Mingw-w64 (3)

インストール先のフォルダを指定する。 既定のままではめっさ長い名前になるので変更したほうがいいかも?

[Next >] でインストールを開始する。

Installing Mingw-w64 (4)
Installing Mingw-w64 (4)

どうもネットから指定した種別に対応する圧縮ファイルをダウンロードしてバイナリを展開しているようだ。 完了したら [Next >]

Installing Mingw-w64 (5)
Installing Mingw-w64 (5)

これで完了。 お疲れ様でした。

試しに gcc を起動してみる。 こんな感じ。

$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc.exe
COLLECT_LTO_WRAPPER=C:/Program\ Files/mingw-w64/x86_64-7.3.0-posix-seh-rt_v5-rev0/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/7.3.0/lto-wrapper.exe
Target: x86_64-w64-mingw32
Configured with: ../../../src/gcc-7.3.0/configure --host=x86_64-w64-mingw32 --build=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 --prefix=/mingw64 --with-sysroot=/c/mingw730/x86_64-730-posix-seh-rt_v5-rev0/mingw64 --enable-shared --enable-static --disable-multilib --enable-languages=c,c++,fortran,lto --enable-libstdcxx-time=yes --enable-threads=posix --enable-libgomp --enable-libatomic --enable-lto --enable-graphite --enable-checking=release --enable-fully-dynamic-string --enable-version-specific-runtime-libs --enable-libstdcxx-filesystem-ts=yes --disable-libstdcxx-pch --disable-libstdcxx-debug --enable-bootstrap --disable-rpath --disable-win32-registry --disable-nls --disable-werror --disable-symvers --with-gnu-as --with-gnu-ld --with-arch=nocona --with-tune=core2 --with-libiconv --with-system-zlib --with-gmp=/c/mingw730/prerequisites/x86_64-w64-mingw32-static --with-mpfr=/c/mingw730/prerequisites/x86_64-w64-mingw32-static --with-mpc=/c/mingw730/prerequisites/x86_64-w64-mingw32-static --with-isl=/c/mingw730/prerequisites/x86_64-w64-mingw32-static --with-pkgversion='x86_64-posix-seh-rev0, Built by MinGW-W64 project' --with-bugurl=https://sourceforge.net/projects/mingw-w64 CFLAGS='-O2 -pipe -fno-ident -I/c/mingw730/x86_64-730-posix-seh-rt_v5-rev0/mingw64/opt/include -I/c/mingw730/prerequisites/x86_64-zlib-static/include -I/c/mingw730/prerequisites/x86_64-w64-mingw32-static/include' CXXFLAGS='-O2 -pipe -fno-ident -I/c/mingw730/x86_64-730-posix-seh-rt_v5-rev0/mingw64/opt/include -I/c/mingw730/prerequisites/x86_64-zlib-static/include -I/c/mingw730/prerequisites/x86_64-w64-mingw32-static/include' CPPFLAGS=' -I/c/mingw730/x86_64-730-posix-seh-rt_v5-rev0/mingw64/opt/include -I/c/mingw730/prerequisites/x86_64-zlib-static/include -I/c/mingw730/prerequisites/x86_64-w64-mingw32-static/include' LDFLAGS='-pipe -fno-ident -L/c/mingw730/x86_64-730-posix-seh-rt_v5-rev0/mingw64/opt/lib -L/c/mingw730/prerequisites/x86_64-zlib-static/lib -L/c/mingw730/prerequisites/x86_64-w64-mingw32-static/lib '
Thread model: posix
gcc version 7.3.0 (x86_64-posix-seh-rev0, Built by MinGW-W64 project)

インストーラ自体は環境変数を変更しないのだがインストールしたフォルダに mingw-w64.bat というのができていて,これを起動すると PATH を追加してコマンドプロンプトを起動する。 常用するのであれば自前で環境変数を変更すればよい。

削除する際はコントロールパネルの「プログラムと機能」から可能だがメチャメチャ分かりにくい名前になっている。

Uninstalling Mingw-w64
Uninstalling Mingw-w64

「プログラムと機能」の右上に検索窓があるのでそこで「mingw」と入力すれば上の画面のようになるので,これで該当プログラムを選択して削除すればいいだろう。

みんな大好き Hello World

では動作確認。 以下のコードを用意する。

#include "stdio.h"

void main(void) {
    printf("hello world\n");
}

これをコンパイルして実行する。

$ gcc hello.c

$ a.exe
hello world

よーし,うむうむ,よーし。

参考図書

プログラミング言語C 第2版 ANSI規格準拠
プログラミング言語C 第2版 ANSI規格準拠
B.W. カーニハン, D.M. リッチー
共立出版
評価 

通称 “K&R”。その筋の人々には「バイブル」と呼ばれる名著(当時は)。

reviewed by Spiegel on 2018.12.7 (powered by Amakuri)

Effective Modern C++ ―C++11/14プログラムを進化させる42項目
Effective Modern C++ ―C++11/14プログラムを進化させる42項目
Scott Meyers
オライリージャパン
評価 

C++ 再勉強中。

reviewed by Spiegel on 2018.12.7 (powered by Amakuri)


  1. MSYS2 installer [return]
  2. SourceForge からのダウンロードなので取扱いに注意。ページの余計なところを触らないこと(笑) [return]