Windows 上で GNU コンパイラを使った開発を行うための選択肢として,MinGW と MSYS を使った方法は最もポピュラーな方法である.32bit 環境であれば MinGW プロジェクトの標準的なインストール方法が使えるが,MinGW プロジェクトでは 64bit 環境向けのコンパイラは提供されていない.そこで,MinGW ベースの 64bit 向けコンパイラセットである MinGW-w64 を,MSYS とあわせて Windows に導入する方法を紹介する.
導入前に検討すべきこと
MinGW を使う最大の意味は,ライセンスに縛られない再頒布可能な Windows 向けソフトウェアを開発することにある.もしコンパイルした成果物を自分の PC でしか使わないのであれば,MinGW よりも Cygwin を使うことを検討した方がよい.単なるコンパイラセットである MinGW と異なり,Cygwin はより完全な UNIX の環境を提供する.2013 年夏には 64bit 向けの Cygwin がリリースされ,64bit コンパイルを行うためだけに MinGW を選ぶ必要性はなくなった.
それに加えて,もし必要としているコンパイラが gcc だけなら(gfortran を必要としていないなら),TDM-GCC も検討すべきである.TDM-GCC にはインストーラが同梱されていて導入が非常に簡単であるのと,-m32 / -m64 オプションを使うことで,コンパイラコマンドを変えずにターゲットを切り替えることができる(MinGW-w64 は -m32 オプションを無視し,常に 64bit でビルドしようとする.正確にはコンパイルを 32bit,リンクを 64bit で行おうとするため,リンクエラーが発生する).
下準備
今回紹介する方法では,MinGW-w64 のコンパイル済みパッケージを 7z 圧縮形式でダウンロードすることになる.これを展開するために,あらかじめ 7-Zip をインストールしておく必要がある.7ZIP は SourceForge.jp からダウンロードできる.
MinGW-w64 のインストール
MinGW-w64 のコンパイル済みパッケージは,SourceForge.net にあるプロジェクトのホームページからダウンロードする.このサイトにはソースコードを含め,多くの種類のコンパイル済みパッケージが存在するので,目的に合わせて適切なものを選ぶ.よくわからなければ,Toolchains targetting Win64 / Personal Builds / mingw-builds / 4.8.* / threads-win32 / seh にあるものを選ぶ.
ダウンロードされるファイルは 7z で圧縮されているので,エクスプローラ上の右クリックメニューから「7-Zip」を選択して展開する.「mingw64」という名前のディレクトリが生成されるので,これをまるごとインストールしたい場所にコピーすればよい.ここでは,C:\MinGW64 にインストールしたものとする.
MSYS のインストール
次に,MSYS のインストールを行う.これは,MinGW の標準インストーラ(mingw-get)を使って行う.mingw-get は MinGW のプロジェクトページからダウンロードする.セットアップを行うための mingw-get-setup.exe(MSYS のインストーラのインストーラ!)は,Installer ディレクトリの中にある.
こちらもダウンロードしたファイルを実行して,セットアップを開始する.mingw-get の説明の次にインストール場所とオプションを聞かれるので,適当なものを選ぶ.今回はオリジナルの MinGW の標準的な構成に合わせて,MinGW-w64 と同じ場所(C:\MinGW64)をインストール場所として指定する(同じ場所にするべきではないという意見もある;後述).オプションの中に「also install support for the graphical user interface」の項目があり,これをチェックすると GUI を使ってパッケージ管理ができるようになるのだが,GUI 上でなぜか表示されないパッケージ (mintty など) があったりするので,現状ではコマンドラインから使うようにしたほうがよいと思う.「Continue」をクリックするとファイルのインストールが始まる.
すべてデフォルトの設定でインストールすると,C:\MinGW64\bin に mingw-get.exe がインストールされる.続いて,mingw-get を使って MSYS の環境を作っていく.
コマンドプロンプトを開き,mingw-get.exe のあるディレクトリに移動する(デフォルトなら C:\MinGW64\bin).ここから,mingw-get install を使って MSYS(と mintty)をインストールする.これらの操作を行うコマンドは次の通り.
$ cd C:\MinGW64\bin $ mingw-get install msys-base msys-mintty
この操作を行うと,C:\MinGW 以下に msys\1.0 ディレクトリが生成され,この下に MSYS のシステムが構成される.MSYS シェルは C:\MinGW64\msys\1.0\msys.bat から起動できるので,MSYS シェルとして mintty を使うためには,リンク先を「C:\MinGW64\msys\1.0\msys.bat –mintty」としたショートカットを作成しておけばよい.また,ホームディレクトリとして Windows 標準のユーザーディレクトリを使用するために,環境変数 HOME に C:\Users\*** を設定しておく.次のマウント設定を行うなら,PATH の設定は必要ない.
最後に,MSYS から先ほどの MinGW-w64 を使えるように設定する.通常の MinGW では,MinGW のあるディレクトリ(今回の場合は C:\MinGW64)を /mingw として MSYS にマウントするので,ここでもそれに従うことにする.MSYS では UNIX よろしく,/etc/fstab を使ってディレクトリをマウントできるようになっている.C:\MinGW64\msys\1.0\etc\fstab を開き,次のような内容を記述する.
C:/MinGW64 /mingw
これで設定はおしまい.確認のため,MSYS シェルを起動し,gcc –version などのコマンドを実行してみる.自分の環境では,次のように表示された.
$ gcc --version gcc.exe (x86_64-win32-seh, Built by MinGW-W64 project) 4.8.2 Copyright (C) 2013 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
使用上の注意
今回は簡単のため,MinGW-w64 と MSYS を同じ場所にインストールした.MSYS や mingw-get を使ってインストールされるライブラリは 32bit なので,gcc を使って自分でコンパイルした 64bit ライブラリと混じると問題となるかもしれない.ほとんどのライブラリはデフォルトで /usr/local/lib に入るので,/usr/lib にある MSYS のライブラリとは区別できるが,心配ならインストール先を明示的に指定してやればよい(し,実際したほうがよい).たとえば configure – make でインストールするようなライブラリであれば,たいていは configure 時に –prefix オプションをつける.
$ ./configure --prefix=/mingw
同じ目的で,MSYS と MinGW-w64 をインストールするときに,最初からインストール場所を分けておくべきという意見もある.自分の意見としては,(MSYS が MinGW-w64 の中にあるとはいえ)ライブラリディレクトリは独立しており,分けた場合でも –prefix の指定などは必要になるので,手間としてはそれほど変わらないように思える.