[[藤井のスタートページ]] * はじめに [#qf404216] Windows Program 開発のためのフリーのツールの一つとして &ref(http://www.mingw.org/,MinGW - Minimalist GNU for Windows); がある。この文書は、それを使うためのメモである。 MinGW は Windows 版の gcc/g++ を中心とした program package (resource compiler も用意されている(windres又はwrc))であり、 その実行環境にはいくつかの選択肢がある。例えば - Windows のコマンドプロンプトで頑張る - Cygwin 環境下で行う - MSYS 環境下で行う - Dev-C++ で行う - &ref(http://www.eclipse.org/,Eclipse); の CDT を使う などがある。 gcc をコマンドプロンプトで使うだけなら、PATH に MinGW の インストール先の bin (default では C:\mingw\bin )を付け加えておくだけでよい。 なお、Windows Programming 関連については以下の別ページも参照のこと。 - [[MinGWによるWindows Programming]] - [[MinGWによる日本語Windows Programming]] - [[MinGWによる Network Programming]] ** Windows 7 に関する追記 (2010年5月25日) [#x6c831c4] Windows 7 で gcc/g++ をコマンドプロンプトで動かしてみた。 標準ユーザでも問題無さそうであることを確認した。 日本語(SHIFT_JISコード)ソースファイルも扱いたかったので、 gcc-core と gcc-g++ は 3.4.5-20060117-1 にした。 パッケージのバーションは - binutils 2.20.1 - gcc-core 3.4.5-20060117-1 - gcc-g++ 3.4.5-20060117-1 - runtime-dll 3.18 - runtime-dev 3.18 - w32api-dev 3.14 を使った。いずれも 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 の日本語も大丈夫("機構" の文字列も大丈夫)。 で SHFT_JIS の日本語も大丈夫("機構" の文字列も大丈夫)。 なお、インストールしなくとも、標準ユーザで USB に置いた まま PATH だけを通してもうまくいった。例えば、USB メモリが ドライブ D: だとすると、コマンドプロンプトに入ったら、 SET PATH=D:\mingw\bin;%PATH% とすればよい。 **参考リンク [#j48c20cb] - http://www2.atwiki.jp/ccw/ * 文字コード問題 [#mea1588c] 文字コードはやっかいな問題である。WindowsNT系及びCE系は base が Unicode (UCS-2LE) なので、文字列 literal などは、 その文字コードで program を書きたいところだが、これが難しい。 現在(2006年1月6日)gcc 3.4.2 (mingw-special) で動かしているが、 文字コード指定がなかなかうまくいかない。 ** (26-May-2010)追記 [#f409a484] gcc/g++ の option -finput-charset、-fexec-charset だが、 3.4.5-20060117-3 ではうまくいかない。どうも iconv が link されていないらしい。3.4.5-20060117-1 の方はうまくいく。 ** Shift_JIS [#a9def330] とりあえず、日本語を通したければ 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 [#l4021273] gcc の入力の文字コードの default は UTF-8 とのことなので、 「メモ帳」を使って、UTF-8 で保存して gcc -fexec-charset=CP932 infile.c としてもうまくいかない。これは、「メモ帳」が UTF-8 のファイルで あることを示すために、先頭に 0xEF 0xBB 0xBF の3バイトを付加する ためで(これは幅0のスペース文字)、この3バイトを除去してやれば 上記記述でうまくいく。 ** _T マクロの利用 [#v4978987] 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 [#l04afe7f] MSYS は MinGW を利用するための console 型インターフェース(shell) で UNIX 系の script などを使えるようにする最小システムとして 提供されている。 MinGW で開発したいのだが Cygwin を install するのはどうも 大げさすぎるという場合に Cygwin の代替として使うという位置づけらしい。 配布は Winodows のインストール用実行イメージで行われているので、 インストールは簡単である。MinGW より先にインストールすることが 推奨されているが、後からでも(多分)特に問題ない。ただし、 ''絶対に MinGW の bin と MSYS の bin を混ぜてはいけない''。 MSYS には gzip や tar が含まれているので、後は必要な tar-ball を 取得して展開し、インストールすればよい。MinGW に必要最低限の tar-ball は - mingw-runtime - w32api - binutils - gcc だそうである。これらは全部 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++ [#bd6cf2ce] MinGW を利用するためのGUIを持つIntegrated Development Environment (IDE)ツール としては &ref(http://www.bloodshed.net/devcpp.html,Dev-C++);がある。このDev-C++の フルパッケージにはMinGWやデバッガ−のGDBも含まれているらしい (2006-01-04現在:Dev-C++ 5.0 beta 9.2 (4.9.9.2)) ので、これをインストールしてみる。 ** 日本語化について [#xca8c7b6] 元の Dev-C++ は日本語が問題となる。本体もフォントの設定などで文字化けを 起こす。これに対しては &ref(http://dev-cpp-jp.sourceforge.jp/,DevC++-JPプロジェクト); で日本語対応パッケージを配布している。多国語対応の programming を するつもりなら、こちらの方がよいかも知れない。 ただし、筆者の場合、すでに英語版としてインストールしてしまった後だった ので、 ftp://www.cs.tohoku-gakuin.ac.jp/pub/windows/IDE/Dev-C++/How2Setup.html の方法で日本語化することにする。 ** Dev-C++ を使ってみて [#k7c2e18d] 少し使ってみたが、β版ということもあるだろうが、まともに使おうとするには ちょっと今ひとつの感がぬぐえない。特にプロジェクトへの新規作成で間違えた ファイル名を入れた後、削除しようとしてもまともにいかない。 一度 Dev-C++ を終了して手でプロジェクトファイルを編集するはめになった。 しかも、それだけではダメで、一度プロジェクトに記載されているものを 全部はずして、もう一度プロジェクトへ挿入し直さないと、正しい Makefile.win が 作られない。 また、ソースを修正した後 save せずに compile すると前の ファイルが compile される。つまり見えているものと compile されるものが 違う状態になる。