MSYS2 MinGW GCC環境をつくる (その1)
  Windows, Linux, C/C++

とある事情で、GTK+3.0ウィンドウ・アプリケーションを作成してLinuxで動かすことになりました。普段はWindowsを使っているので、Linuxで開発作業を進めていくのが億劫です。(ゲストOSとしてLinuxをインストールしてその中で作業をすることになってしまいますので)

できることなら、開発作業はWindowsで進めていきたい。ということで、WindowsにMSYS2 + MinGW GCC環境を構築してGTK+3.0アプリケーション開発ができる環境を作っていきます。最終的にはアプリケーションのソースコードをそのままLinux環境でビルドします。

MSYS2をダウンロードする

MinGWの公式ウェブサイトはhttp://www.mingw.org/ですが、こちらはどうも更新が滞っているようです。今はMSYS2のサイトからMinGWをインストールしたほうが良いようです。(http://www.mingw.org/からダウンロードできるMSYS1にはGTK+2.4パッケージは含まれていますが、GTK+3.0パッケージが含まれていませんでした。)

32ビットWindowsにインストールする場合は左側のmsys2-i686-*.exeをダウンロードします。64ビットWindowsにインストールする場合は右側のmsys2-x86_64-*.exeをダウンロードします。

2018年1月30日時点でのファイル名はmsys2-i686-20161025.exemsys2-x86_64-20161025.exeでしたので、以下、64ビット版のmsys2-x86_64-20161025.exeのインストールを例として説明していきます。

MSYS2をインストールする

ダウンロードしたmsys2-x86_64-20161025.exeをダブルクリックするとインストーラーが起動します。

次へをクリックします。

インストールするディレクトリを指定します。特に事情がなければ、デフォルトのC:\msys64のままで良いと思います。次へをクリックします。

スタートメニューに追加するショートカットの指定です。そのまま次へをクリックします。

インストールが始まります。少し時間がかかるのでしばらく待ちましょう。

インストールが完了すると完了ボタンが表示されます。完了をクリックします。

インストールが完了すると、Windowsのスタートメニューに3つのショートカットが追加されます。

  • MSYS2 MinGW 64-bit
  • MSYS2 MinGW 32-bit
  • MSYS2 MSYS

MinGW 64-bitMinGW 32-bitMSYS どれを選択してもUNIXライクなシェルが起動します。それぞれの環境は独立しており、この後インストールしていくパッケージは環境ごとに分かれています。

パッケージを更新する

インストーラーの最後の画面でMSYS2 64bit を実行中。のチェックを入れたままにしていた場合は、MSYS2 MSYSが起動します。

シェルを終了してしまった場合は、スタートメニューからMSYS2 MinGW 64-bitMSYS2 MinGW 32-bitMSYS2 MSYSのいずれかを起動するか、もしくは、インストールディレクトリC:\msys64の下にあるmingw64.exemingw32.exemsys2.exeのいずれかを起動してください。どの方法でシェルを起動してもパッケージのインストール作業は同じです。

MSYS2にはArch Linux由来のパッケージマネージャーpacmanが標準で含まれており、パッケージマネージャーpacmanを使って、様々なパッケージを追加していくことができます。

はじめに以下のコマンドを実行してパッケージデータベースを最新にします。この処理は実際にパッケージを更新するわけではなくパッケージの一覧を新しくするだけなので、あまり時間がかからずに終了します。

パッケージデータベースを更新するコマンド
$ pacman -Sy

パッケージデータベースの更新が終了したら、続いて以下のコマンドを実行してパッケージをアップグレードします。

パッケージをアップグレードするコマンド
$ pacman -Su

“インストールを行いますか?”と確認メッセージが出るので、そのままEnterキーを押すか、Yまたはyを入力してからEnterキーを押します。

インターネット通信環境にもよりますが、パッケージのアップグレード処理には少し時間がかかります。そして、以下のメッセージが出て処理が止まることがあります。

警告
terminate MSYS2 without returning to shell and check for updates again for example close your terminal window instead of calling exit

“シェルに戻らずにMSYS2を終了し、もう一度、更新をチェックしてください。たとえば、exit コマンドを呼ぶ代わりにターミナル・ウィンドウを閉じてください。” といった意味ですね。

この状態ではもうキー入力を受け付けないのでexitコマンドを入力することもできません。指示通り、ウィンドウ右上の×ボタンを押します。すぐに反応しない場合は、何度か×ボタンを押して10秒程度待ってみてください。

このようなダイアログが表示されたらOKをクリックして終了します。

もう一度、スタートメニューからMSYS2 MinGW 64-bitMSYS2 MinGW 32-bitMSYS2 MSYSのいずれかを起動して、パッケージのアップグレードをします。

パッケージをアップグレードするコマンド
$ pacman -Su

先程と同じ確認メッセージが出るので、そのままEnterキーを押すか、Yまたはyを入力してからEnterキーを押します。

今度は無事にシェル・プロンプトに復帰しました。プロンプトに復帰したら、“何も行うことがありません”と表示されてパッケージ更新の必要がなくなるまで、pacman -Suを繰り返し実行してください。

GCCパッケージをインストールする

パッケージを更新したら、ようやくGCCコンパイラのインストールです。 pacman-Ssqオプションを付けてgccを含むパッケージを検索してみます。

gccを含むパッケージを検索するコマンド
$ pacman -Ssq gcc

$ pacman -Ssq gcc
mingw-w64-i686-gcc
mingw-w64-i686-gcc-ada
mingw-w64-i686-gcc-fortran
mingw-w64-i686-gcc-libgfortran
mingw-w64-i686-gcc-libs
mingw-w64-i686-gcc-objc
mingw-w64-i686-lcov
mingw-w64-x86_64-gcc
mingw-w64-x86_64-gcc-ada
mingw-w64-x86_64-gcc-fortran
mingw-w64-x86_64-gcc-libgfortran
mingw-w64-x86_64-gcc-libs
mingw-w64-x86_64-gcc-objc
mingw-w64-x86_64-lcov
gcc
gcc-fortran
gcc-libs
mingw-w64-cross-gcc

たくさんのパッケージが見つかりました。gcc-fortrangcc-objなどが末尾に付くものはC/C++ではなく別の言語のパッケージなので無視できますが、gcc本体だけでも以下の3種類のパッケージがあります。

  • mingw-w64-i686-gcc MinGW gcc コンパイラ(32ビット版)
  • mingw-w64-x86_64-gcc MinGW gcc コンパイラ(64ビット版)
  • gcc MSYS gcc コンパイラ

パッケージ名に何も付いていないgccはMSYSのパッケージで、MSYSのシェル内で使うことを想定しているパッケージです。頭にmingw-w64-i686-と付いているのはMinGW 32-bitのパッケージです。(32ビットパッケージなのにw64と付いていて紛らわしいですね) 同様にmingw-w64-x86_64-と付いているのはMinGW 64-bitのパッケージです。MinGW 32-bitパッケージやMinGW 64-bitパッケージはMinGWシェルの中だけでなく、Windowsのコマンドプロンプト(cmd.exe)などからも使うことができます。

最終的にはEclipse CDTからgccを呼び出してC/C++アプリケーションをビルドするのが目的なので、MSYS2シェルからしか使えないgccパッケージではなく、外部からも呼び出せるmingw-w64-x86_64-gccパッケージをインストールします。

パッケージのインストールにはpacman-Sオプションを使用します。

mingw-w64-x86_64-gccパッケージをインストールするコマンド
$ pacman -S mingw-w64-x86_64-gcc

mingw-w64-x86_64-gccパッケージと一緒にmingw-w64-x86_64-binutils-2などの依存パッケージも自動的にインストールしてくれるようになっています。

“インストールを行いますか?”と確認メッセージが出るので、そのままEnterキーを押すか、Yまたはyを入力してからEnterキーを押します。

gccコマンドの確認

mingw-w64-x86_64-gccパッケージのインストールが完了したらgccコマンドが使えるか確認しておきます。

プロンプトで以下のコマンドを実行してみてください。

gccのバージョンを表示するコマンド
$ gcc --version

コマンドを実行したシェルがMSYSだった場合、残念ながらgccコマンドが見つからないというメッセージが表示されます。

これは、MSYS、MinGW 64-bit、MinGW 32-bitそれぞれで環境が分離されており、それぞれのパッケージコマンドがお互いに見えないようになっているからです。

MSYSシェルの代わりにMinGW 64-bitシェルを起動して、gcc --versionを実行してください。

MinGW 64-bitシェルであれば、mingw-w64-x86_64-で始まるパッケージのコマンドが使えるようになっています。

Windowsのコマンドプロンプト(cmd.exe)でもPATH環境変数にC:\msys64\mingw64\binを追加すれば、gccコマンドを使うことができます。

これで、MinGW gccのインストールは完了です。

makeパッケージをインストールする

Makefileを処理するのに必要になるmakeコマンドもインストールしておきます。

makeパッケージも3つあります。

  • mingw-w64-i686-make MinGW make コマンド(32ビット版)
  • mingw-w64-x86_64-make MinGW make コマンド(64ビット版)
  • make MSYS make コマンド

gccmingw-w64-x86_64-で始まるパッケージをインストールしましたが、makeコマンドはmingw-w64-の付かないMSYSのmakeパッケージをインストールします。

mingw-w64-*-makeの場合はコマンドの名前がmake.exeではなくmingw32-make.exeとなっており、自分でmake.exeにリネームするなどの手間がかかります。

makeパッケージをインストールするコマンド
$ pacman -S make

これで、makeのインストールも完了です。

次回はEclipse CDTをインストールしていきます。