MinGWとは anchor.png

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がリリースされている。

Page Top

MSYS/MinGWのインストール anchor.png

MSYS/MinGWは古いパッケージで,32bitアプリのみ作成できる開発ツール。

64bitアプリを作成したい場合は,後述のMingw-w64をインストールする。
この時,まだMSYS/MinGWをインストールしてない場合は,より新しいMSYS2/Mingw-w64をインストールしたほうが良い。

理由は以下のような理由がある。

  • MSYS2がMSYSより新しい
  • MSYS2はパッケージ管理ツールでインストールするパッケージを管理できる
  • Git for WindowsはMSYS2を使用している
  • Rubyの一部のgemをコンパイルするためにDevkitを使うが,DevkitはMSYS2/Mingw-w64を使っている
Page Top

MSYS/MinGWのインストール(32bit版) anchor.png

http://sourceforge.net/projects/mingw/ のページにある緑色のDownloadからmingw-get-setup.exeをダウンロードする。(09/07/2012時)
そのダウンロードしたインストーラーを実行する。

  • Repository Catalogues
    Use pre-packaged repository cataloguesを選択する。
  • インストールするディレクトリ先の設定
    デフォルトは,「C:\MinGW」。スペースとか日本語は使わないようにする。
  • Select Components C Compier,C++ Compiler,MSYS Basic System,MinGW Developer Toolkit (MSYSに含まれる) をマークする。コンパイルをするだけなら,C Compier,C++ Compilerだけでもいいと思う。FORTRANやAdaもあります。
  • Installを押して,インストールを実行する。 Finishで終わり。

ちなみに,GCCのバージョンは,6.3.0です。

Page Top

他のMSYSパッケージの追加 anchor.png

コマンドプロンプトで,

mingw-get list | less

とすると,追加できるパッケージを見ることが出来る。

また,MinGW Installerでパッケージの更新も出来る。

Page Top

MSYS2/MinGW-w64のインストール anchor.png

MSYS2は上記の古いMSYSをバージョンアップした新しいPOSIX環境(Posixエミュレーション)。
MinGW-w64は,32bitと64bitアプリどちらも作成可能なGnu GCC開発ツールで,GCCのバージョンもより新しくなっている。

MSYS2とMingw-w64はそれぞれ別々にインストールすることが出来る。
なので既にインストールしてある古いMSYSをそのまま使用して,MinGW-w64のみをインストールして64bitアプリの開発をするといった事ができる。

またMSYSの代わりにMSYS2を新たにインストールして,MSYS2のパッケージ管理ツールpacmanを使用してMinGW-w64をインストールする事もできる。

Page Top

MinGW-w64のみをインストール(64bit版/32bit版) anchor.png

従来のMSYSをインストールしていてその環境を使って64bitアプリを開発したいなどの理由でMinGW-w64をインストールしたい場合は,MinGW-w64のみをインストールすることが出来る。

MinGW-w64を使って32bitと64bitのコードの両方のプログラムを出力するようにするには,32bitコードを出力するコンパイラと64bitコードを出力するコンパイラの両方をインストールして切り替えて利用することになる。

MSYS/MinGWがインストールされていない場合は,まずMSYS2をインストール後にパッケージ管理ツールでMinGW-w64をインストールする。
この場合は,MinGW-w64のみをインストールすることは行わないようにします。

Page Top

MinGW-w64のみをインストールする anchor.png

MinGW-w64のみをインストールするには公式サイトから,インストーラのmingw-w64-install.exeをダウンロードする。

ダウンロードしたインストーラを実行すると,インストールが始まる。
Settings画面で,インストールするGCCのバージョン,アーキテクチャ,スレッドライブラリの種類,例外機構の選択が出来る。

  • Version:インストールしたいGCCのバージョンを選択。(特に理由がない場合は最新版で良いと思う。)
  • Architecture:ターゲットシステムのアーキテクチャーを選択する。
    • i686(32bit)かx86_64(64bit)を選択する。
  • Thread : スレッドモデルの選択。posixかwin32を選択する。(特に理由がないのであればposixで良いと思う。)
    • posix:POSIXスレッド。Unix,Linux,Windowsをサポートしている。
    • win32:WIN32スレッドのみをサポートしている。 win32はWindowsネイティブ関数を使っていて速いのだが,C++ 11以降のthread,mutex,futureが使えなくなる。
  • Exception:例外処理ハンドリングの選択。アーキテクチャーにより以下を選択できる。
    • i686
      • dwarf:DWARF
      • sjlj:SetJump/LongJump
        C++標準ライブラリを使用した例外処理
    • x86_64
      • seh:Structured Exception Handling
        Windowsネイティブな例外処理。(おすすめ)
  • Build Version:ビルドバージョンの選択。(特に理由がなければ最新版で良いと思う。)

Architectureをx86_64にすると64bit出力するコンパイラが,i686にすると32bit出力するコンパイラがインストールされる。

インストール先は,デフォルトではC:\Program Files以下にインストールされるので,C:\MinGW64のように,短いパスになるように変更してインストールするようにします。

コンパイラの本体は,

  • 64bit出力コンパイラの場合
    [インストールしたディレクトリ]\mingw64
  • 32bit出力コンパイラの場合
    [インストールしたディレクトリ]\mingw32

にインストールされる。

環境変数のpathに,インストールしたディレクトリ\binを追加しておく。この時に64bitか32bitのコンパイラを選択して,これらのディレクトリをpathに追加しておく。

Page Top

MSYS2をインストールしてMinGW-w64を追加インストールする anchor.png

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をインストールする必要はない。

Page Top

パッケージ管理ツールからMinGW-w64をインストール anchor.png

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が使用出来るようになっています。

Page Top

環境変数pathの設定 anchor.png

MSYS/MinGWまたはMSYS2/Mingw-w64をインストールしたら,Windowsのコマンドプロンプトからも開発ツールとして実行できるように環境変数のpathに追加しておきます。

  • コントロール パネル>システムとセキュリティ>システムをクリックし,システムの詳細設定を開く
  • 詳細設定タブの「環境変数」をクリック
  • システム環境変数(全ユーザーで使用する場合)またはユーザーの環境変数の「Path」を選択して「編集」をクリック
  • MSYS/MinGWまたはMSYS2/MinGW-w64を追加する
    以下のように環境変数を設定する。
    MSYS/MinGWの場合,
    MINGW_HOME=C:\MinGW
    MSYS_HOME=C:\MinGW\msys\1.0
    MSYS2/MinGW-w64の場合,
    MINGW_HOME=C:\msys64\mingw64(or mingw32)
    MSYS_HOME=C:\msys64\usr
    MSYS2_PATH_TYPE=inherit
    のようにする。MSYS2_PATH_TYPE=inheritは,WindowsのPATH環境変数をそのまま使用する設定。

    そして,環境変数pathに,
    %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.
Page Top

MSYS/MSYS2の起動と環境 anchor.png

スタートメニューから「MinGW Shell」または「MSYS2 MSYS,MSYS2 MinGW 32bit,MSYS2 MinGW 64bit」で,コンソール(シェルはBash)が動作する。Linux(Unix)と同じシェルが使えるようになる。

この時,カレントディレクトリはユーザーの環境変数HOMEに設定したディレクトリになる。環境変数HOMEを設定していない場合は,C:\MinGW\msys\1.0\home\(ユーザ名)というディレクトリが作成されて,そこを使うようになる。

なので,環境変数HOMEによく自分が使う作業ディレクトリを設定しておくと良い。

Page Top

ロケール環境 anchor.png

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'
Page Top

Windowsのディレクトリとの対応 anchor.png

Page Top

MSYS/MinGWをインストールした場合 anchor.png

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
Page Top

MSYS2/MinGW-w64をインストールした場合 anchor.png

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ファイルで選択できるようになる。

Page Top

カスタマイズ anchor.png

/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
Page Top

アンインストール anchor.png

MSYS/MinGWをアンインストールしたい時などは,コントロールパネルのプログラムと機能からMinGWをアンインストールできる。
その後インストールしたディレクトリを削除する。

MSYS2/MinGW-w64のアンインストールも同様に,コントロールパネルのプログラムと機能でアンインストールできる。

Page Top

他のパッケージの追加 anchor.png

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                  使っていないキャッシュを削除
Page Top

Makefileの雛形 anchor.png

プログラム開発時には,実行ファイルを作成する場合にmakeを使うと便利。makeは標準でMakefileと呼ばれるファイルを使用するが,その雛形を作っておいてそれをコピーして使用するのが楽。
Makefileの雛形:fileMakefile これをMakefileとしてコピーして使うと楽かも。

まあ, AutotoolsCMake を使ったほうが便利。


新しくコメントをつける

題名
ゲスト名
投稿本文
より詳細なコメント入力フォームへ

トップ   凍結 差分 バックアップ 複製 名前変更 リロード   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom
Counter: 1373, today: 4, yesterday: 0
最終更新: 2020-12-26 (土) 16:07:53 (JST) (1214d) by yuji