トップ 検索 一覧 ヘルプ RSS ログイン

gcc, windresで日本語を扱う方法の変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
!!!gcc, windresで日本語を扱う方法
MinGWに含まれるコンパイラであるgcc.exe、そしてリソースコンパイラであるwindres.exeは日本語を扱う場合に一手間必要だ。そのメモ。

gccは内部の文字表現はUTF-8で行っている。そのためShift_JISのソースコードを読ませると、コンパイルエラーとなるか、警告が表示される。これは''ソースコードをUTF-8にすることで回避可能''だ。しかしそれをクリアしても、実行時にUTF-8で出力を行えば、結局文字化けして表示されることになる。これを解決するオプションがある''らしい''。

gcc.exe(g++.exeなども)の3.4.0以降では以下の指定でShift_JISのソースファイルを読み、実行時にShift_JISで出力できるとのこと。
 --input-charset=cp932 --exec-charset=cp932
input-charsetは入力ファイル(ソースファイル)の文字コードを指定し、exec-charsetは完成したバイナリの実行時に外部とのやり取りに使用する文字コードである模様。

windres.exeの2.16.91以降では以下の指定で日本語(おそらくShift_JIS)を取り込めるとのこと。
 --language=0411
この0411というマジックナンバーはWindows系プログラミングで時々出てくる。日本語リソースの番号と認識しているのだが自分があまり必要ないのできっちり確認していない…。上記のcp932はコードページ932で、いわゆるShift_JISのマイクロソフト的実装を指しているのは承知しているのだが…。

!!た・だ・し…
''筆者が試した限りでは、MinGWのサイトで配布されているバイナリではこれらのオプションを使用できなかった''。理由は、gcc自身のビルド時にiconvのサポートが有効にされていないことにあるらしい。わざわざそのためにビルドしなおすのも億劫なので、結局使用していない。自分で使用するツールに日本語は不要なので…。
''筆者が試した限りでは、MinGWのサイトで配布されているバイナリではこれらのオプションを使用できなかった''。理由は、gcc自身のビルド時にiconvのサポートが有効にされていないことにあるらしい。わざわざそのためにビルドしなおすのも億劫なので、結局使用していない。

ちなみに、実装方法はあまり好ましくないらしいが、[MinGW日本語化プロジェクト|http://sourceforge.jp/projects/mingw-jp/]のものなら、当然Shift_JISが通る。
が、こちらは長らく更新されておらず、gccのバージョンが古い…。