MinGW(gcc) の Windows へのインストールと使い方

Windows で C, C++ 言語のコンパイラー である gcc(g++) を使いたい場合は MinGW をインストールします。 今回はこの MinGW のインストール方法と gcc の使い方について説明します。

MinGW とは

MinGW は "Minimalist GNU for Windows" の略で、ネイティブの Windows アプリを開発するために必要な最小限の環境を提供するツールセットです。

ここでネイティブのアプリというのはコンパイルして作るマシン語の実行ファイルで、 C, C++ 言語だけではなく、 Ada, Fortran, Objective-C といった言語のコンパイラーを使うこともできます。 因みにネイティブでないものといえば、 仮想マシン(VM)やスクリプト言語のアプリですが、 違いについて詳しく知りたい方は以前の記事を見て下さい。 なお、 Windows で gcc のような GNU ツールを使いたい場合には Cygwin という手もあります。
Cygwin も GNU やオープンソースのツールを使うための環境を提供するツールセットというのは同じですが、 POSIX に準拠したライブラリーやシステム環境を作った上でアプリを動作させます。 POSIX というのは Unix 系 OS の API やアプリの動作を規定した規格です。 これはいわば、 Windows 上に Linux を乗っける感じです。

これはこれですごいものなのですが、単に Windows 上でアプリを作りたいという時には大仰です。 MinGW はアプリのビルドに最小限のツールを集めたツールセットとして Cygwin から派生しました。
また、 Cygwin で開発する場合、基本的に POSIX に準拠して Cygwin 上で動作するアプリを作ることになります。 それに対して MinGW の場合、 デフォルトではサードパーティ製のライブラリーを何も使わず、 Windows のシステムランタイムのみ依存した POSIX に準拠しないアプリを作れるようになっています。

ダウンロード

インストールするためには MinGW のホームページからインストーラーをダウンロードします。 lang_mingw_dl.png


ホームページの [Download Installer] をクリックすると、 SourceFoge のページに飛び、ダウンロードが始まります。

インストール

ダウンロードロードしたファイル(mingw-get-setup.exe) は正確には mingw-get というパッケージ管理ツールのインストーラーです。 そのため、 gcc のインストールには次の手順を踏みます。
  1. パッケージ管理ツールのインストール
  2. 管理ツールで gcc のパケージを選択してインストール
  3. 環境変数 PATH の設定

パッケージ管理ツールのインストール

インストーラー(mingw-get-setup.exe)を実行するとウィザードが表示されます。

lang_mingw_inst.png

基本的にデフォルトの設定のままで問題ありません。必要があればインストール先を変更するぐらいでしょう。

なお、 mingw-get 自体はコマンドラインツールですが、それを GUI で使えるフロントエンドもついてきます。 最初のチェックはそれをインストールするかどうかです。
また、作成されるショートカットはその GUI フロントエンドのショートカットで、 gcc 等のショートカットではありません。ただ、何故か私が試した場合スタートメニューの方のショートカットは作成されませんでした。

パッケージのインストール

パッケージ管理ツールのインストールが終了すると自動的にそれが起動されます。 ここで必要なパッケージを選択して、インストールします。
このパッケージ管理ツールはネットワーク対応で、 選択したパッケージをネットワークから取ってきてインストールしてくれます。

lang_mingw_inst_select.png

パッケージは次の中から選択します。
パッケージ 説明
mingw32-developer-toolkit MinGW 自体の開発者用のツール群
mingw32-base make などのビルドに必要な基本ツールセット
mingw32-gcc-ada Ada コンパイラー
mingw32-gcc-fortran Fortran コンパイラー
mingw32-gcc-g++ C++ 言語コンパイラー
mingw32-gcc-objc Objective-C コンパイラー
msys-base "Minimal SYStem" Cygwin の簡易版
bash と grep、 awk などの基本的な Unix ツール群のセット

C および C++ 言語を使うだけであれば、 migw32-base, mingw32-gcc-g++ で十分です。
後から欲しくなった場合も、前節で作成したショートカットや以下のファイルを実行すれば起動できるので、選択に神経質になる必要はありません。
  • (インストール先フォルダー)\libexec\mingw-get\guimain.exe
また、インストールだけでなく、アップグレードの時にも使うので、 パッケージ管理ツールの起動方法は覚えておいた方がいいでしょう。



選択後、実際にインストールする場合にはメニューの [Installation] → [Apply Changes] を実行します。

lang_mingw_inst_select2.png

ダイアログが出てくるので、 [Apply] を選択するとインストールが実行されます。

lang_mingw_inst_select3.png

環境変数 PATH の設定

インストールが完了したら、以下のフォルダーを環境変数 PATH に追加します。
  • (インストール先フォルダー)\bin
    デフォルトであれば C\MinGW\bin
MSYS のパッケージをインストールした場合は "(インストール先フォルダー)\msys\(バージョン番号)\bin" のフォルダーも追加しておきます。

gcc の使い方

gcc には数多くの機能があります。 ここでは C, C++ 言語でプログラミングをする上で、最初に覚えておくべき使い方についてのみ説明します。

なお、 C 言語の場合 gcc、 C++ 言語では g++ のコンパイラーを使いますが、 内部的には同じもので、使い方も一緒です。

コンパイル

プログラムを作成する場合、 以下の形式でコンパイルします。
g++ [オプション] ソースファイル [...]
~/lang/cpp/sample $ g++ hello.cpp 
hello.cpp :
#include <iostream>

int main()
{
    std::cout << "Hello world!" << std::endl;
    return 0;
}
実行ファイルはオプションで指定しなければ、 a.exe のファイル名となります。
~/lang/cpp/sample $ ./a.exe 
Hello world!
実行ファイル名は -o オプションで指定します。 また、 ソースファイルは複数指定することもできます。
~/lang/cpp/sample $ g++ -o hello.exe main.cpp hellofunc.cpp

オプション

基本的なオプションを以下の表に挙げておきます。
オプション 説明
--help ヘルプ(Usage)を出力
-o 出力ファイル名の指定
-D define 定義の追加
-DFOO と指定するとコード中で #define FOO と定義したのと同じになる。
-g デバッグモードでのコンパイル
デバッガー(gdb) でデバッグするのに必要な情報を付けて実行ファイルを作る。
-I インクルードファイルの検索パスの追加
-l ライブラリーの指定
-L ライブラリーの検索パスの追加

インクルードファイル というのはヘッダーなどのファイルで、 先ほどのサンプルでは iostream がそれにあたります。
ただ、 iostream のような標準のヘッダーは MinGW では "(インストール先フォルダー)\include" 以下に置かれていて、特に指定する必要はありません。 それ以外のところに置いてあるヘッダーを使いたい場合に -I オプションを使います。


ライブラリー とここで言っているのは静的ライブラリーといってコンパイル時に結合するライブラリーです。 例えば libm.a という数値演算用のライブラリーを使いたければ、 lib と .a をとって -lm と指定します。
~/lang/cpp $ g++ -lm mathsamp.cpp 
こちらも標準のものは "(インストール先フォルダー)\lib" 以下に置かれていて、パスを特に指定する必要はありません。それ以外のところにあるライブラリーを使い時に -L オプションを使います。

因みにライブラリーとしてよく聞く dll は動的ライブラリーといって、実行時に呼び出して使うのですが、 ちょっと扱いが違うので、今回は割愛します。


Cygwin の説明で出てきた POSIX ですが、コマンドラインオプションの付け方にも規格があります。 また、 その上に GNU のスタイルガイドもあります。
gcc はその規格に則っており、 UNIX 系のオプションの指定の仕方に慣れてない方は以前の記事が役に立つかもしれません。

環境変数

ライブラリー等をインストールした場合、毎回 -I や -L で指定するのは面倒です。 そのため、環境変数で検索用のパスを追加することができます。
指定する場合には環境変数 PATH のように ;(セミコロン) で区切って複数追加できます。

環境変数 説明
CPATH C, C++ 言語共通のインクルードファイルの検索パス
C_INCLUDE_PATH C 言語のインクルードファイルの検索パス
CPLUS_INCLUDE_PATH C++ 言語のインクルードファイルの検索パス
LIBRARY_PATH ライブラリーファイルの検索パス

オブジェクトファイルの作成

実際、アプリを作る場合にはソースファイルが大量になるのが普通です。 最後にそういう開発の さわり だけ説明しておきます。

ソースファイルを指定すると一気にやってしまうのですが、内部的には以下の手順で実行ファイルを作成します。
  1. ソースファイルからオブジェクトファイル(.o)を作成
  2. オブジェクトファイルをリンカーで結合して実行ファイルを作成
-c オプションを使うとオブジェクトファイルを作成だけになります。 また、リンカーは内部的に呼び出してくれるので、 gcc や g++ で結合できます。
~/lang/cpp/sample $ g++ -c hellofunc.cpp
~/lang/cpp/sample $ g++ -c main.cpp 
~/lang/cpp/sample $ ls
hellofunc.cpp  hellofunc.o  main.cpp  main.o
~/lang/cpp/sample $ g++ -o hello.exe hellofunc.o main.o 
何故、こういった手順で行うかというと、修正後のビルド時間を短縮するためです。 例えば、 hellofunc.cpp を修正した場合、 そのファイルのコンパイルだけをして main.cpp をコンパイルすることなく、実行ファイルが作成できます。

通常、こういったビルド作業は手間なので Makefile というファイルにビルドのルールを書いて make でビルドを行います。 ただ、この Makefile を書く作業も大変なので、最近では Autogen のように Makefile も自動生成させるようなツールを使うようなことも多くなってきています。


 

Lua の Windows へのインストールと使い方

Lua は組み込み向けのスクリプト言語です。
今回は Lua の Windows へのインストール、使い方や exe の作り方について説明します。 また、 Emacs 用の編集モードの設定についても解説しています。

Lua とは

Lua はブラジル製のスクリプト言語で、ポルトガル語で「月」という意味らしいです。
Lua の大きな特徴は次の 2 つです。
  • 高速
  • 組み込み向け

高速

Lua の動作速度はスクリプト言語の中ではトップクラスです。
LuaVM という独自の 仮想マシン(VM) 上で動作し、これが速さの大きな要因の一つだと思います。 Ver. 1.9 以降の Ruby 、 Python の PyPy 、 JavaScript の V8 エンジンなど 高速化のためにスクリプト言語は内部的に VM を使うような流れにあります。 そんな中、 Lua は最初から VM を使うように設計されています。

VM では JIT コンパイルを行うとより高速化が期待できます。 本家の LuaVM はそこまではやっていないようですが、 JIT コンパイルまで行う LuaJIT も開発されています。

組み込み向け言語

Lua の売りはなんといっても、C, C++ アプリへの組み込みやすさです。

エディターをはじめとして、設定や機能拡張のためアプリケーションでスクリプト言語を使えるようにしたいことは多いです。 実際 Emacs では Lisp のインタープリターを内臓していますし、 MS Office では VBA が使えます。
Lua はそんなアプリへの組み込みをしやすいように作られており、ゲームの開発などでよく使われているらしいです。

因みに Emacs とよく比べられる Vim にも Vim 用のスクリプトはあります。 しかし、 Lisp のようなちゃんとした言語とは言い難く、この点に関しては Vim は各段に劣っていると思います。
そう思っている人は多いみたいで、 Lua 内蔵の Neovim のプロジェクトが立ち上がり、 多くのスポンサーを得たそうです。 なお、 Lua が組み込みやすいのは C, C++ で書かれたアプリです。 Java や .NET のような VM のアプリであれば、 JRuby, IronRuby といったその VM のスクリプト言語の方が移植しやすいです。 さらに最近では C, C++ でも Ruby を組み込み向けにした mruby という選択肢もあります。

言語仕様

言語仕様的には Lua はかなりシンプルです。 汎用プログラミング言語としては必要最小限の機能しかないといっても過言ではありません。
しかし、 Lua の良さは先ほどのアプリケーションなどへの 組み込みのしやすさ にあります。シンプルさによって軽量な処理系となり、組み込みしやすさにつながっています。 手軽に組み込める言語としては十分な機能だと思います。


言語の印象はというと、私は手続き型の JavaScript というイメージです。
テーブルという型が特徴的でオブジェクトと連想配列を兼ねていて、この辺はすごく JavaScript っぽいと感じます。 Lua ではさらに配列も兼ねています。

JavaScript のようにプロトタイプのオブジェクト指向もできるのですが、もともと手続き型として設計されていたらしく、ちょっと無理矢理感があって、やっぱり手続き型の言語だと感じました。
ただ、機能的にちゃんと準備されていないけど、"頑張ればできなくはない" という事が多いのも Lua の一つの特徴だと思います。

インストール

バイナリーの選択とダウンロード

Lua のバイナリーパッケージはいくつかのサイトで公開されています。
本家サイトからたどると Windows のバイナリーは 2 つのサイトが紹介されています。
  1. Lua Binaries Download
    exe のファイルだけでなく、組み込み用 dll のバイナリーも配布されています。 ただ、リンク先が間違えているのか、若干リンクがたどりづらいです。
  2. Lua - Joe DF's Builds
    exe と srlua が配布されています。最新版(5.3.0)が配布されています。(2015-3-14 時点)
このほかにも以下のサイトで配布されています。 ここのバイナリーはインストーラー形式でなのですが、開発が止まっているのか、バージョンが少し古いです。 最新版があり、わかりやすいので、ここでは 2 番目のサイト で説明を進めたいと思います。
インストーラーではないですが、インストールもそんなに難しくはないです。


インストールする環境にあわせて 32 ビットまたは 64 ビット版の圧縮ファイルをサイトからダウンロードします。 lua_dl.png

なお srlua は Lua スクリプトから実行ファイル形式(exe)のプログラムを作るためのツールです。
こちらも後で使い方を説明していますので、興味がある場合はダウロードしてください。

インストール

ダウンロードした圧縮ファイル(lua-X.X.X_WinYY_bin.zip)を好きなところに展開します。 これだけで最低限のところは完了です。
よく使う場合には、さらに展開したフォルダーを環境変数 PATH に追加して下さい。

展開されたフォルダーには以下のファイルが入っています。
  • lua.exe
  • luac.exe
  • lua53.dll


srlua の圧縮ファイル(lua-X.X.X_WinYY_bin.zip)の場合も展開し、 PATH に追加します。 バージョンが同じであれば、 lua.exe と同じフォルダーに入れても構いません。
こちらには次のファイルが入っています。
  • glue.exe
  • srlua.exe
  • lua53.dll

使い方

Lua の主な使い方について紹介します。
  1. lua : スクリプトの実行
  2. lua -i : 対話モード
  3. luac : バイトコンパイル
  4. glue, srlua : exe ファイルの作成

スクリプトファイル

使い方の前に、 先にソースファイルについて簡単に説明します。

Lua ではファイルの拡張子には lua が使われます。

hello.lua :
-- サンプルファイル
print("Hello world!")
ソースファイルの文字コードはなんでも構いませんが、 Lua では日本語(マルチバイト)文字を認識しているわけではありません。 文字列の出力として日本語を表示したい場合、 Windows であれば Shift-JIS で書けばそれをそのまま表示します。

ただし、 UTF-8 を使う場合、スクリプトとして実行する時には BOM 付きでもなしでもいいのですが、 後で紹介する exe ファイルを作る場合は BOM なし にしていないとエラーとなります。

lua.exe : スクリプトの実行

スクリプトとして使う場合には、 lua にソースコードを渡して実行します。 これが Lua の一番基本的な使い方だと思います。
~/lang/lua/hello $ lua hello.lua 
Hello world!
-e オプションでワンライナーの実行もできます。
~/lang/lua/hello $ d:/usr/prog/lua/lua.exe -e "print(\"Hello world!\")"
Hello world!
また、ヘルプを表示する場合は -h オプションです。

lua.exe (-i) : 対話モード

lua(.exe) を -i オプションを付けて起動すると対話(インタラクティブ)モードで起動します。
~/lang/lua $ lua.exe -i
Lua 5.3.0  Copyright (C) 1994-2015 Lua.org, PUC-Rio
> 1 + 1
2
> print("Hello world!")
Hello world!
> 
引数にファイルを渡していた場合はファイルをロードして対話モードに入ります。

luac.exe : バイトコンパイル

luac を使うとソースファイルを中間コードであるバイトコードにコンパイルすることができます。 バイトコードは LuaVM 上で使うコードで、 Java でいえば、 class ファイルを作成するような処理です。
生成されるファイルのファイル名は-o オプションで指定します。(省略時 luac.out)
~/lang/lua/hello $ luac.exe -o hello.luac hello.lua 
~/lang/lua/hello $ ls
hello.lua  hello.luac
~/lang/lua/hello $ lua.exe hello.luac
Hello world!
luac はあまり使うことはないと思いますが、 バイトコードを直接実行した方が解析処理が減る分、多少速くなります。
なお、-s オプションをつけるとデバッグ情報を削るので、少しサイズが小さくなります。

実行ファイルの作成

gluesrlua.exe を使うと、 lua のスクリプトファイルを実行可能な exe ファイルにすることができます。

ただし、 C++ のように機械語にコンパイルするのではなく、 srlua.exe と動作させたい lua のスクリプトファイルを glue プログラムでくっつけるような感覚です。
  $ glue "srluaのPATH" "スクリプトファイル" "生成ファイル名"
~/lang/lua/hello $ glue d:/usr/prog/lua/srlua.exe hello.lua hello.exe
引数の srlua.exe はコマンドとして使うわけではないので、 ファイルの場所がわかるようにパスで指定する必要がありますし、 .exe も省略できません。


なお、 生成したファイルの実行には luaXx.dll も必要です。 exe と同じフォルダーまたはパスの通ったフォルダーにおいて置かなければならず、 配布する場合などには注意が必要です。

Emacs モードの設定

Lua のソースファイルの編集には Emacs を使います。 Lua 編集のための Emacs の設定について説明します。


Lua 用の Emacs モードは lua-mode で、 これはパッケージマネージャーから簡単にインストールすることができます。 インストールすると .lua のファイルを開いた時に lual-mode になります。



lua モードとして特有なコマンドは次の 2 つです。
コマンド 機能
C-c C-f カーソル位置の関数の説明を表示。
C-c C-l バッファーを実行


関数の説明はブラウザーを起動して対応箇所の説明を表示します。 ただし、説明は英語です。


また、 Emacs では編集中のコードを Lua のインタープリターに渡すことができます。 C-c C-l
でバッファー全体を実行します。
インタープリターは lua-default-application の変数で指定することができます。
ただ、 デフォルトで "lua" なので、パスが通っているところにおいていれば、特に指定する必要はありません。 設定する場合は以下のような記述を ~/.emacs.d/init.el に記述します。
(setq lua-default-application "d:/usr/prog/lua/lua.exe")
なお、 私の環境では Windows のせいか上手く実行しませんでした。



 

IrfanView でスクリーンショットを作成

スクリーンショットを作るとき、どんなソフトを使っていますか?
Gimp のような本格的なペイントソフトもいいのですが、 ちょっとしたスクリーンショットを作りたいとき、そこまでの機能はいらないなという時があります。

私の場合は、そういう時 IrfanView を使っています。 IrfanView は画像ビューアーとして有名なソフトで、私も普段は画像ビューアーとして使っています。 ただ、 IrfanView には簡単な編集機能もついていて、ちょっとしたスクリーンショットであれば、 これで作ることができます。


まず、 [PrtScrn] の機能などで画像を用意します。 これを切り取り、貼り付け でちょうどいいところを取り出し、 リサイズ([画像] → [リサイズ/ リサンプル])で大きさを調整します。


古いバージョンではなかったのですが、ペイント機能もあります。
これは [編集] → [ペイントダイアログを表示] のメニューか [F12] キーで表示できます。

irfanview_pd_menu.png



これを使えば、枠で囲ったり、コメントを書き込んだりといったこともできます。

irfanview_pd.png


 
このページをシェア
アクセスカウンター
カレンダー(アーカイブ)
プルダウン 降順 昇順 年別

04月 | 2015年05月 | 06月
- - - - - 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31 - - - - - -


はてな新着記事
はてな人気記事
ブロとも申請フォーム
プロフィール

yohshiy

Author:yohshiy
職業プログラマー。
仕事は主に C++ ですが、軽い言語マニアなので、色々使っています。

はてブ:yohshiy のブックマーク
Twitter:@yohshiy

サイト紹介
プログラミング好きのブログです。プログラミング関連の話題や公開ソフトの開発記などを雑多に書いてます。ただ、たまに英語やネット系の話になることも。