プロが教える店舗&オフィスのセキュリティ対策術

gcc で linux のソフトの開発をやっております。いろいろな都合でWindowsとソースの共通化をするため日本語はシフトjisを使っているのですが、たとえば"ソ"などで\をつけないといけません。しかし、これだと今度はWindowsで通らなくなります。私はゲーム機の開発もやってるのですが、私が使っているゲーム機用のgccは、なにかパッチがあててあるのか、LANG=C-SJIS と環境変数を定義しておけばシフトjisを通してくれます。linuxの普通のgccでも同じようなことをできるようにするパッチはないでしょうか?

A 回答 (2件)

GCCのバージョンが3.4以上であれば、次のオプションを付けることでシフトJISが使えるようになります。



-finput-charset=cp932 -fexec-charset=cp932

見ての通り、-finput-charsetがソース文字集合を、-fexec-charsetが実行文字集合を指定するオプションです。これを使えば、ソース文字集合と実行文字集合が違っても大丈夫です。
ちなみに、cp932ではなくSHIFT_JISとするとまともに動作しませんのでご注意ください。
    • good
    • 0
この回答へのお礼

なるほど!! できました。ありがとうございました。

ただ、仕事で使っているいくつかのサーバーで gcc -v やってみたら、3.4.x はそんなに多くはなく、ちょっと古いのは 3.2.x で、もっと古いのは 2.9.x でした。3.2.x ではコンパイルエラーになってしまいました。gccをバージョンアップとなりますと、関連するライブラリ関係も全部入れ替え、サーバーで動いている実行ファイルも configuer からやり直しですか? あ、これはよく考えると他で聞いたほうがいいみたいですね。

お礼日時:2006/03/08 10:22

GCC 3.3.x以前のバージョンで使える多バイト文字処理用のパッチもあるにはありますが、それを使うにはGCCのビルドからやり直さなければなりません。



外付けの対応方法もいくつかありますが、ここではMCPPを紹介しておきます。これは、プリプロセッサだけを摩り替える方法です。
このプリプロセッサはGCC 3.4.x以降の多バイト文字対応を諦めた形跡がありますが、逆に3.3.x以前であれば使えると思います。
ただし、プリプロセッサを摩り替えることになるので、GCCの臭い所を突いたコーディングをしていると、エラーになったり、誤動作する危険性もあるので十分に注意してください。

他には、実行文字集合がシフトJISでなくてもよいのであれば、Makefileの中で、いったんiconvやnkfを使ってEUC-JPに変換してから、コンパイルするというのも一つの方法かと思います。

参考URL:http://www.m17n.org/mcpp/
    • good
    • 0
この回答へのお礼

いろいろ情報ありがとうございました。

最終的にはパッチのあてるのではなく、gccをバージョンアップの方針となりました。

お礼日時:2006/03/09 07:56

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!