はじめに †Windows Program 開発のためのフリーのツールの一つとして
MinGW は Windows 版の gcc/g++ を中心とした program package (resource compiler も用意されている(windres又はwrc))であり、 その実行環境にはいくつかの選択肢がある。例えば
などがある。 gcc をコマンドプロンプトで使うだけなら、PATH に MinGW の インストール先の bin (default では C:\mingw\bin )を付け加えておくだけでよい。 なお、Windows Programming 関連については以下の別ページも参照のこと。 Windows 7 に関する追記 (2010年5月25日) †Windows 7 で gcc/g++ をコマンドプロンプトで動かしてみた。 標準ユーザでも問題無さそうであることを確認した。 日本語(SHIFT_JISコード)ソースファイルも扱いたかったので、 gcc-core と gcc-g++ は 3.4.5-20060117-1 にした。 パッケージのバーションは
を使った。いずれも tar+gzip されているものをとってきて tar zxvf で USB メモリに展開。インストール先 Windows 7 機に管理者アカウントで ログオン。その USB を Windows 7 機に差して、\mingw フォルダ以下を ごっそり C:\mingw に copy。その後、
と選んで「詳細設定」タブで「環境変数」を選んで、システム環境変数の PATH に C:\mingw\bin を追加。これで完了。 g++ -finput-charset=CP932 -fexec-charset=CP932 で SHFT_JIS の日本語も大丈夫("機構" の文字列も大丈夫)。 なお、インストールしなくとも、標準ユーザで USB に置いた まま PATH だけを通してもうまくいった。例えば、USB メモリが ドライブ D: だとすると、コマンドプロンプトに入ったら、 SET PATH=D:\mingw\bin;%PATH% とすればよい。 参考リンク †文字コード問題 †文字コードはやっかいな問題である。WindowsNT系及びCE系は base が Unicode (UCS-2LE) なので、文字列 literal などは、 その文字コードで program を書きたいところだが、これが難しい。 現在(2006年1月6日)gcc 3.4.2 (mingw-special) で動かしているが、 文字コード指定がなかなかうまくいかない。 (26-May-2010)追記 †gcc/g++ の option -finput-charset、-fexec-charset だが、 3.4.5-20060117-3 ではうまくいかない。どうも iconv が link されていないらしい。3.4.5-20060117-1 の方はうまくいく。 Shift_JIS †とりあえず、日本語を通したければ Shift_JIS で書いて、 gcc -finput-charset=CP932 -fexec-charset=CP932 infile.c とすれば、Shift_JIS base のプログラムはできる。0x5C 問題 も無いみたいだ。 (だがなぜか、CP932 の代わりに SJIS と書いても SHIFT_JIS と 書いても MS_KANJI と書いてもうまくいかない -- iconv で受け付ける ものは OK のハズなんだが、、)。 UTF-8 †gcc の入力の文字コードの default は UTF-8 とのことなので、 「メモ帳」を使って、UTF-8 で保存して gcc -fexec-charset=CP932 infile.c としてもうまくいかない。これは、「メモ帳」が UTF-8 のファイルで あることを示すために、先頭に 0xEF 0xBB 0xBF の3バイトを付加する ためで(これは幅0のスペース文字)、この3バイトを除去してやれば 上記記述でうまくいく。 _T マクロの利用 †Windows programming をやったことがある人間なら知っていると思われる が、95系と NT系、CE系のソースを共用させる目的で _Tマクロをよく 利用する。例えば #ifdef UNICODE #define _UNICODE #endif #include <windows.h> #include <TCHAR.H> int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { TCHAR msg[] = _T("高エネルギー加速器研究機構の藤井です"); TCHAR title[] = _T("Hello Title"); MessageBox (NULL, msg, title, MB_OK); return (0); } てな具合である(機構の構の字が問題の 0x5C を含んでいるので こういう例題にしてある)。ここで、MessageBox?関数は UNICODE が 定義されていれば WideCharacter?版が、そうでなければ SingleCharacter?版が 使われる。というわけで、UNICODE を定義して compile すれば NT、CE系の実行イメージが、そうでなければ 95系でも使えるイメージが 作られる。これを Shift_JIS で whello.c として保存したとすると、 NT、CE系の実行イメージを作るには gcc -DUNICODE -finput-charset=CP932 -fexec-charset=UCS-2LE whello.c -mwindows とすればよい。 MSYS †MSYS は MinGW を利用するための console 型インターフェース(shell) で UNIX 系の script などを使えるようにする最小システムとして 提供されている。 MinGW で開発したいのだが Cygwin を install するのはどうも 大げさすぎるという場合に Cygwin の代替として使うという位置づけらしい。 配布は Winodows のインストール用実行イメージで行われているので、 インストールは簡単である。MinGW より先にインストールすることが 推奨されているが、後からでも(多分)特に問題ない。ただし、 絶対に MinGW の bin と MSYS の bin を混ぜてはいけない。 MSYS には gzip や tar が含まれているので、後は必要な tar-ball を 取得して展開し、インストールすればよい。MinGW に必要最低限の tar-ball は
だそうである。これらは全部 MSYS とは別のフォルダ (例えば C:\mingw とか)か MSYS 配下の mingw に インストールする。 何度も言うが、 間違っても MinGW の bin と MSYS の bin を混ぜてはいけない。 MSYS 配下の mingw にインストールしない場合は /etc/fstab を作って、その中で指定しておく。 /etc/fstab の例が /etc/fstab.sample として存在しているので、 書き換えは容易である。 ここまで出来れば、MSYS の Console で hello world 程度の実行イメージは UNIX 系の通常の方法で出来る。 ただし、default で作られる実行イメージファイルは a.out ではなく、a.exe である。 Dev-C++ †MinGW を利用するためのGUIを持つIntegrated Development Environment (IDE)ツール
としては
日本語化について †元の Dev-C++ は日本語が問題となる。本体もフォントの設定などで文字化けを
起こす。これに対しては
ただし、筆者の場合、すでに英語版としてインストールしてしまった後だった ので、 ftp://www.cs.tohoku-gakuin.ac.jp/pub/windows/IDE/Dev-C++/How2Setup.html の方法で日本語化することにする。 Dev-C++ を使ってみて †少し使ってみたが、β版ということもあるだろうが、まともに使おうとするには ちょっと今ひとつの感がぬぐえない。特にプロジェクトへの新規作成で間違えた ファイル名を入れた後、削除しようとしてもまともにいかない。 一度 Dev-C++ を終了して手でプロジェクトファイルを編集するはめになった。 しかも、それだけではダメで、一度プロジェクトに記載されているものを 全部はずして、もう一度プロジェクトへ挿入し直さないと、正しい Makefile.win が 作られない。 また、ソースを修正した後 save せずに compile すると前の ファイルが compile される。つまり見えているものと compile されるものが 違う状態になる。 |