MinGW(Minimalist GNU for Windows)は,GNUの開発ツール(gcc,g++,リンカ,アセンブラ,デバッガ,...)のWindows移植版。
MinGWはWindows APIのためのヘッダファイルを含んでおり,フリーのコンパイラ・セットであるGCCを,Windowsアプリケーションの開発のために利用するための開発ツール。
MinGWは,コマンドラインから使用することも,各種IDEへ統合することも出来る。
またMinGWのシェル環境というべきMSYS(minimal system)という軽量のUNIX風シェル環境を持っている。これには端末エミュレータや開発ツールのautoconfを実行可能にするためのPOSIXコマンド群とかが含まれている。 標準はたぶんMSYSなんだろうが,EclipseやDOSプロンプト上でも開発することもできる。
MinGWでコンパイルしたプログラムは,Windowsのライブラリ(msvcrt.dll)を利用するため,他にGPLなライブラリを使用していないかぎり,再配布の制約は無いことになる。
この2つのパッケージはCygwinからフォークして誕生した。CygwinはWindows上に完全なPOSIX環境を提供する事を目的にしているが,それに対してMinGWはフリーのコンパイラと各種ツールのみ(POSIX APIは持っていない)を提供していて,MSYSはCygwinと同様なPosixエミュレーションを持ったPosixツール類を提供している。
MinGWはクロス開発環境としても利用でき,これによりマルチプラットフォームでも利用可能になっている。LinuxマシンでMinGWを使うことでWindowsアプリを開発することが出来る。
なお,MSYS・MinGWはフリーソフトウェアで,Win32APIを利用するためのヘッダファイルもパブリックドメインで提供されており,GNUツールの移植版はGPLになっている。
MSYSとMinGWを両方合わせてもファイル容量は小さいので,USBペンドライブのようなリムーバブル・メディアに入れても利用できる。Windowsシステムのレジストリなどを全く使用しないので,インストールも削除も簡単に行える。
MinGWはWindowsで動作する32bitアプリを作成のためのツールで,64bitアプリは作成できない。64bitアプリ作成には,MinGWからフォークしたMingw-w64がある。
またMSYSをより新しくしたMSYS2がリリースされている。
MSYS/MinGWは古いパッケージで,32bitアプリのみ作成できる開発ツール。
64bitアプリを作成したい場合は,後述のMingw-w64をインストールする。
この時,まだMSYS/MinGWをインストールしてない場合は,より新しいMSYS2/Mingw-w64をインストールしたほうが良い。
理由は以下のような理由がある。
http://sourceforge.net/projects/mingw/ のページにある緑色のDownloadからmingw-get-setup.exeをダウンロードする。(09/07/2012時)
そのダウンロードしたインストーラーを実行する。
ちなみに,GCCのバージョンは,6.3.0です。
MSYS2は上記の古いMSYSをバージョンアップした新しいPOSIX環境(Posixエミュレーション)。
MinGW-w64は,32bitと64bitアプリどちらも作成可能なGnu GCC開発ツールで,GCCのバージョンもより新しくなっている。
MSYS2とMingw-w64はそれぞれ別々にインストールすることが出来る。
なので既にインストールしてある古いMSYSをそのまま使用して,MinGW-w64のみをインストールして64bitアプリの開発をするといった事ができる。
またMSYSの代わりにMSYS2を新たにインストールして,MSYS2のパッケージ管理ツールpacmanを使用してMinGW-w64をインストールする事もできる。
従来のMSYSをインストールしていてその環境を使って64bitアプリを開発したいなどの理由でMinGW-w64をインストールしたい場合は,MinGW-w64のみをインストールすることが出来る。
MinGW-w64を使って32bitと64bitのコードの両方のプログラムを出力するようにするには,32bitコードを出力するコンパイラと64bitコードを出力するコンパイラの両方をインストールして切り替えて利用することになる。
MSYS/MinGWがインストールされていない場合は,まずMSYS2をインストール後にパッケージ管理ツールでMinGW-w64をインストールする。
この場合は,MinGW-w64のみをインストールすることは行わないようにします。
MinGW-w64のみをインストールするには, 公式サイトから,インストーラのmingw-w64-install.exeをダウンロードする。
ダウンロードしたインストーラを実行すると,インストールが始まる。
Settings画面で,インストールするGCCのバージョン,アーキテクチャ,スレッドライブラリの種類,例外機構の選択が出来る。
Architectureをx86_64にすると64bit出力するコンパイラが,i686にすると32bit出力するコンパイラがインストールされる。
インストール先は,デフォルトではC:\Program Files以下にインストールされるので,C:\MinGW64のように,短いパスになるように変更してインストールするようにします。
コンパイラの本体は,
にインストールされる。
環境変数のpathに,インストールしたディレクトリ\binを追加しておく。この時に64bitか32bitのコンパイラを選択して,これらのディレクトリをpathに追加しておく。
MSYS2はMSYSをより新しくしたPOSIX環境のツール。MSYSと基本的には違いは少ないが含まれているツール類がより新しいバージョンになっている。
もし既にMSYSを使用している場合でも,MSYSからMSYS2に移行したほうが良いと思う。
MSYS2をインストールするには,公式サイトからインストーラーをダウンロードする。
32bit版はmsys2-i686-20190524.exeで,64bit版はmsys2-x86_64-20190524.exeになる。自分のPCに合わせて好きな方を選んでダウンロードする。
32bit版は2020/05/17からリリースされなくなった。64bit版のインストラーはmsys2-x86_64-yyyymmdd.exeになっている。
ダウンロードしたインストーラをダブルクリックして,インストールを行う。
インストール場所は,C:\msys2 とか C:\msys64とか,とにかく短くなるようにします。
実はGit for WindowsをインストールするとMSYS2もインストールされる。
というかGit for WindowsがMSYS2環境を使用して動作しているので,Git for Windowsをインストールしている場合は,同じMSYS2がダブってインストールされることになる。
MSYS2のパッケージ管理ツールからGitをインストールすることも出来るので,この場合はGit for Windowsをインストールする必要はない。
MSYS2がインストールできたら,プログラムメニューからMSYS2のMSYS Shellをクリックして起動する。
コマンドプロンプトに似た画面(Bashシェル)が表示されるので,以下のようにしてパッケージ管理情報を更新する。
この時,処理が完了してもプロンプトには戻らないので,強制的にXボタンを使ってウィンドウを閉じます。
$ pacman -Syu : : 警告: terminate MSYS2 without returning to shell and check for updates again 警告: for example close your terminal window instead of calling exit
再度,MSYS2のMSYS Shellを起動して,同じコマンドをもう一度実行します。
$ pacman -Syu
更新パッケージがあればリストアップされるので,yを入力してパッケージを更新します。
そして,
$ pacman -Suu
とします。
次に,MinGW-w64(64bitアプリを作成する)をインストールします。
$ pacman -S base-devel $ pacman -S mingw-w64-x86_64-toolchain
必要であれば,MinGW-w64(32bitアプリを作成する)をインストールする。
> pacman -S mingw-w64-i686-toolchain
これらのインストール場所は以下のようになる。(MSYS2をC:\msys64にインストールした場合)
c:\msys64 : MSYS2 (64bit) c:\msys64\mingw64 : MinGW-w64 (64bit) c:\msys64\mingw32 : MinGW-w64 (32bit)
MinGW-w64のインストールはこれでOKです。
MSYS2 MinGW 32-bitをクリックすれば32bit MinGWが使えて,MSYS2 MinGW 64-bitで64bit MinGWが使用出来るようになっています。
MSYS/MinGWまたはMSYS2/Mingw-w64をインストールしたら,Windowsのコマンドプロンプトからも開発ツールとして実行できるように環境変数のpathに追加しておきます。
MINGW_HOME=C:\MinGW MSYS_HOME=C:\MinGW\msys\1.0
MINGW_HOME=C:\msys64\mingw64(or mingw32) MSYS_HOME=C:\msys64\usr MSYS2_PATH_TYPE=inherit
%MINGW_HOME%\bin;%MSYS_HOME%\bin;
この後,コマンドプロンプトを起動して「gcc --version」と実行したら,gccの情報が表示されればOK。
D:\home\ueno> gcc --version gcc (MinGW.org GCC-6.3.0-1) 6.3.0 Copyright (C) 2016 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をインストールした場合は,このように表示される。
MinGW-w64の場合は以下の表示される。
D:\home\ueno> gcc --version gcc.exe (Rev3, Built by MSYS2 project) 13.2.0 Copyright (C) 2023 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 Shell」または「MSYS2 MSYS,MSYS2 MinGW 32bit,MSYS2 MinGW 64bit」で,コンソール(シェルはBash)が動作する。Linux(Unix)と同じシェルが使えるようになる。
この時,カレントディレクトリはユーザーの環境変数HOMEに設定したディレクトリになる。環境変数HOMEを設定していない場合は,C:\MinGW\msys\1.0\home\(ユーザ名)というディレクトリが作成されて,そこを使うようになる。
なので,環境変数HOMEによく自分が使う作業ディレクトリを設定しておくと良い。
MSYSの場合はPosixコマンド類の日本語コードはデフォルトがSJISになっている。
しかもMSYSに含まれているコマンドは,ロケール設定に関わらずSJISになるようだ。
[yueno@nalux-d0523:~]$ locale LANG=ja_JP.SJIS LC_CTYPE="ja_JP.SJIS" LC_NUMERIC="ja_JP.SJIS" LC_TIME="ja_JP.SJIS" LC_COLLATE="ja_JP.SJIS" LC_MONETARY="ja_JP.SJIS" LC_MESSAGES="ja_JP.SJIS" LC_ALL= [yueno@nalux-d0523:~]$ echo $LESSCHARSET dos [yueno@nalux-d0523:~]$ echo $OUTPUT_CHARSET sjis
MSYS2の場合はPosixコマンド類の日本語コードはデフォルトがUTF-8になっている。
MSYS2に含まれているコマンドは,ロケール設定を反映した動作をする。
[yueno@nalux-d0523:~]$ locale LANG=ja_JP.UTF-8 LC_CTYPE="ja_JP.UTF-8" LC_NUMERIC="ja_JP.UTF-8" LC_TIME="ja_JP.UTF-8" LC_COLLATE="ja_JP.UTF-8" LC_MONETARY="ja_JP.UTF-8" LC_MESSAGES="ja_JP.UTF-8" LC_ALL= [yueno@nalux-d0523:~]$ echo $LESSCHARSET dos [yueno@nalux-d0523:~]$ echo $OUTPUT_CHARSET dos
なので,MSYSとMSYS2では使うコンソールのローケール設定に注意する。コンソールの表示とロケール等が一致していないと,コンソール表示で日本語が文字化けする。
さらにLESSCHARSETとOUTPUT_CHARSET環境変数もうまい具合に設定する必要がある。
Git for Windowsをインソールして併用する場合は,GitコマンドがUTF-8を想定している(MSYS2を使っているから)ので,実行するコンソール環境はUTF-8で使用しないと日本語が文字化けする。
このため,コマンドプロンプトでGit for Windowsやmanコマンドを使用する時は,BATファイルなどでLAN環境変数をja_JP.UTF-8に一時的に変更して実行する。
git.bat
@echo off setlocal :SETLESS set LANG=ja_JP.UTF-8 :CMDEXE git.exe %1 %2 %3 %4 %5 %6 %7 %8 %9 endlocal
bashを使っている場合は,以下のようなaliasにしておく。
alias git='LANG=ja_JP.UTF-8 LESSCHARSET=utf-8 git'
C:\MinGW\msys\1.0\etcに,fstabというファイルを作成する。(C:\MinGWにインストールした場合)
c:/mingw /mingw
このようにすると,ShellであるBashコンソールを開いた時に,
/ は,C:\MinGW\msys\1.0 /usr は,/と同じでC:\MinGW\msys\1.0 /home/(ユーザー名) は,通常だとC:\Documents and Settings\(ユーザー名) /c は,C:\ /mingw は,C:\MinGW (/etc/fstabでマウントされている。)
のようになります。
Bashを起動して確認してみる。
[yueno@nalux-d0523:~]$ mount C:\Users\yueno\AppData\Local\Temp on /tmp type user (binmode,noumount) C:\MinGW\msys\1.0 on /usr type user (binmode,noumount) C:\MinGW\msys\1.0 on / type user (binmode,noumount) C:\mingw on /mingw type user (binmode) c: on /c type user (binmode,noumount) d: on /d type user (binmode,noumount) e: on /e type user (binmode,noumount) f: on /f type user (binmode,noumount) g: on /g type user (binmode,noumount) s: on /s type user (binmode,noumount) u: on /u type user (binmode,noumount) x: on /x type user (binmode,noumount) y: on /y type user (binmode,noumount) z: on /z type user (binmode,noumount)
このように,Windowsでの各ドライブなども全て/(ルート)からのパスでアクセスできるようになっている。
[yueno@nalux-d0523:~]$ ls / bin etc include lib local m.ico msys.bat msys.ico postinstall sbin share var
C:\msys64\etcに,fstabというファイルがあるので編集する。(C:\msys64にインストールした場合)
c:/msys64/mingw64 /mingw64
このようにすると,ShellであるBashコンソールを開いた時に,
/ は,C:\msys64 /usr は,/と同じでC:\msys64 /home/(ユーザー名) は,通常だとC:\Documents and Settings\(ユーザー名) /c は,C:\ /mingw64 は,C:\msys64\mingw64 (/etc/fstabでマウントされている。)
のようになります。
このようにすると,32bitのgcc(mingw32)を使う場合は,
c:/msys64/mingw32 /mingw32
とfstabファイルを書き換えないとダメ。
Bashを起動して確認してみる。
[yueno@nalux-d0523:~]$ mount c:/msys64/mingw64 on /mingw64 type ntfs (binary,noacl,posix=0) c:/msys64/msys64 on / type ntfs (binary,noacl,auto) c:/msys64/usr/bin on /bin type ntfs (binary,noacl,auto) C: on /c type ntfs (binary,noacl,posix=0,user,noumount,auto) D: on /d type ntfs (binary,noacl,posix=0,user,noumount,auto) E: on /e type ntfs (binary,noacl,posix=0,user,noumount,auto) S: on /s type ntfs (binary,noacl,posix=0,user,noumount,auto) U: on /u type smbfs (binary,noacl,posix=0,user,noumount,auto) X: on /x type smbfs (binary,noacl,posix=0,user,noumount,auto) Y: on /y type smbfs (binary,noacl,posix=0,user,noumount,auto) Z: on /z type smbfs (binary,noacl,posix=0,user,noumount,auto)
このように,Windowsでの各ドライブなども全て/(ルート)からのパスでアクセスできるようになっている。
[yueno@nalux-d0523:~]$ ls / InstallationLog.txt components.xml maintenancetool.dat mingw32 mingw64 msys2.exe msys2_shell.cmd test.bat var autorebase.bat dev maintenancetool.exe mingw32.exe mingw64.exe msys2.ico network.xml tmp bin etc maintenancetool.ini mingw32.ini mingw64.ini msys2.ini proc usr
なので,/etc/fstab(C:\msys64\etc\fstab)に/mingw64のマウントポイントを追加しないで,/etc/profile(C:\msys64\etc\profile)を修正したほうが良い。
この場合は,以下のようにする。
MINGW32) MINGW_MOUNT_POINT="${MINGW_PREFIX}" PATH="${MINGW_MOUNT_POINT}/bin:${MSYS2_PATH}${ORIGINAL_PATH:+:${ORIGINAL_PATH}}" ↓ PATH="/c/msys64/mingw32/bin:${MSYS2_PATH}${ORIGINAL_PATH:+:${ORIGINAL_PATH}}" : : MINGW64) MINGW_MOUNT_POINT="${MINGW_PREFIX}" PATH="${MINGW_MOUNT_POINT}/bin:${MSYS2_PATH}${ORIGINAL_PATH:+:${ORIGINAL_PATH}}" ↓ PATH="/c/msys64/mingw64/bin:${MSYS2_PATH}${ORIGINAL_PATH:+:${ORIGINAL_PATH}}"
に,MinGW-w64のgccの場所を実行パスを設定している。こうすると,32bit gccを使う場合と64bitのgccを使う場合とを,起動BATファイルで選択できるようになる。
/usr/localがないので,必要であれば作成する。標準的なUNIX/Linuxでは,ユーザーが追加したコンポーネントなどはデフォルトでここに入るのが普通。
[yueno@d0523:~]$ mkdir /usr/local
上記のように,インストール直後のカレントディレクトリつまり$HOMEは,環境変数HOMEが設定されていない場合/home/<ユーザー名>が自動でセットされる。
環境変数HOMEを作成していれば,その場所になる。
/etc/profile(C:\MinGW\msys\1.0\profile)ファイルの最後に以下のように追加しても良い。
/etc/profile
export WORK=/c/home/yuji cd $WORK
MSYS/MinGWをアンインストールしたい時などは,コントロールパネルのプログラムと機能からMinGWをアンインストールできる。
その後インストールしたディレクトリを削除する。
MSYS2/MinGW-w64のアンインストールも同様に,コントロールパネルのプログラムと機能でアンインストールできる。
MSYS/MinGWでパッケージを追加する場合は,コマンドプロンプトで,
mingw-get list | less
とすると,追加できるパッケージを見ることが出来る。
MSYS2/MinGW-w64の場合は,パッケージ管理ツールpacmanでパッケージの追加・更新などが出来る。
pacman -h ヘルプ pacman -<option> -h -<オプション>のヘルプ pacman -Sy 最新のパッケージデータベースをダウンロードする pacman -Su パッケージのアップデート(事前にupdate-coreが必要) pacman -Syu パッケージのアップデート(-Syと-Suを同時に行う) pacman -S [package] パッケージをインストールする pacman -R [package] パッケージが必要としていたものを残したままアンインストールする pacman -Rs [package] パッケージと必要としていたものもアンインストールする pacman -Ss [pattern] パッケージを検索 pacman -Sl | grep [pattern] パッケージの検索2(インストール済み) pacman -Sg パッケージグループの一覧を表示 pacman -Qqe インストール済みのパッケージ一覧を表示 pacman -Si [package] 詳しい情報を表示 pacman -Sc 使っていないキャッシュを削除
新しくコメントをつける