• ベストアンサー

gcc で シフトJISを通す方法をお教えください

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

質問者が選んだベストアンサー

  • ベストアンサー
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.1

GCCのバージョンが3.4以上であれば、次のオプションを付けることでシフトJISが使えるようになります。 -finput-charset=cp932 -fexec-charset=cp932 見ての通り、-finput-charsetがソース文字集合を、-fexec-charsetが実行文字集合を指定するオプションです。これを使えば、ソース文字集合と実行文字集合が違っても大丈夫です。 ちなみに、cp932ではなくSHIFT_JISとするとまともに動作しませんのでご注意ください。

moritan2
質問者

お礼

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

その他の回答 (1)

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

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/
moritan2
質問者

お礼

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

関連するQ&A

  • 文字操作をしたjisコードをシフトjisに変えたい

    携帯メールをCGIで受け取って処理するスクリプトを書いているのですが 文字コードの処理について行き詰っています。 $str = " $B$F$9$H (B"; #jisコードで"てすと" として、この文字列をjcode.pmでシフトjisに変換したいのですが $body = Jcode::convert($str, 'sjis'); このようにしても$bodyの中身は" $B$F$9$H (B"のまま変わりません。 MIME::parserでうけとったjisコードの文字列はちゃんと変換されるのでjcode.pmに問題はないと思われますが、 文字列操作をして変数に入れるとMIME::parserで受け取った場合とおなじ内容でもデコードされないとゆう結果になります。 なにか根本的に違うのでしょうか… スペースを省いてみたり $body = Jcode::convert($str, 'sjis','jis'); としてみたりしたのですが まったくダメでした。 ちょっとしたアドバイスだけでもいいのでよろしくお願いします。 あとお金がかかってもよいので、そういった問題を解決できそうなサイトなどがあれば紹介していただければと思います。 よろしくお願いします。m(__)m

  • シフトJIS/7ビットJISの変換ライブラリについて

    C/C++で使える漢字コード変換のライブラリを探しています。 以下の条件に当てはまるライブラリ等ご存じでしたら、教えていただけないでしょうか? 1.C/C++で使用可(VisualC++, BorlandC++Builderなど、Windows環境) 2.シフトJISと7ビットJISコードの変換が可能(sjis -> jis, jis -> sjis) 3.SI/SO方式(0x0E/0x0F)でカタカナ/アルファベットを切り替えている7ビットJISコードからシフトJISへの変換が可能。また、同様に、シフトJISからSI/SO方式の7ビットJISコードへの変換が可能 4.ソースコードがあれば尚良い。 特に、3.のSI/SO方式で変換可能ライブラリを探しているのですが、なかなか見つかりません。 「ESC(I」「ESC(J」「ESC$B」を使用してアルファベット/カタカナの変換はどのライブラリでもできているのですが、上記のSI/SO方式での変換ができません。 現在までに評価して駄目だったものをリストにしてみます。 これ以外にご存じの方、もしくは、このリストに載っているものでも可能だよ!、というご意見などいただければ幸いです。 ・nkf for windows http://www.vector.co.jp/soft/win95/util/se295331.html ・babel http://tricklib.com/cxx/ex/babel/ ・漢字コード変換ライブラリ http://www.vector.co.jp/soft/win95/prog/se087586.html ・ack http://hp.vector.co.jp/authors/VA004474/win/ack.txt ・SJET http://www.vector.co.jp/soft/dl/dos/util/se018396.html

  • linux gcc 特有のプリプロセッサ定義は?

    たとえば、Windows で Visual studio を使えばプリプロセッサで _WIN32 が必ず定義されていて、違う環境と共有のソースでも Windows 特有の処理の記述が出来ます。linux で gcc を使っている時の同じようなプリプロセッサの定義はなんでしょうか?

  • 入力した漢字をシフトJISコードに変換したいのですが

    パームウエアの開発に使用するため、 ウインドウに入力した漢字をシフトJISコードに変換してくれるような便利なソフトウエア?(Windows用のアプリケーション)は無いでしょうか ご存知の方教えてください。

  • Linuxでゲーム開発

    Linuxで(具体的にはLindows)ゲームを作りたいと考えています。 LinuxはツールがいろいろあってVBのようなGUIの統合開発環境がないようなのですが、何か良いツールはないものでしょうか? VBのようなツールが欲しいと思うのですが、なければそれに近いようなものでも構いません。 kylixを勉強しようかなあーとも思いましたが、どうも初心者向けの書籍がなく、インストールしたままです。WideStudio本も買いましたが、どうもrubyやC++などが必要のようで・・・。 Javaっていう話もありますが、それならWindowsでもいいじゃんっ!って思えてしまってどうも踏み込めません。 みなさん、どうやってゲーム開発などをされているんでしょうね??? QTを使うためにGLADE入れて、gtk+やGCC・・・・んーーいろいろと使えるのがLinuxの良いところですけども、GUIアプリの統合開発環境ともなると、ううううううううううむ、です。_| ̄|○ ちょっとゲーム開発したいだけなのに。。。 いろいろありすぎ!!(×_×)

  • [GCC]libgccをコンパイルするのに適切なヘッダファイルは?

    ルネサスSH系CPU用のGCCクロスコンパイラをmakeしようとしています。 ところどころパッチを当てながら、libgccをコンパイルするstageまで来たのですが、その途中でエラーになって先に進めません。 エラーとソースコードから読み取れる範囲では、どうもpthread.hで定義されるべきpthread_tなどの構造体が定義されていないか、または、#if~#endifブロックでスキップされてしまっているようです。 今回はクロスコンパイラ用ということで、--with-headersオプションを使って、newlib用のヘッダファイルを使用してビルドしようとしていますが、newlibのヘッダファイルはlibgccのビルド用としては不適当なのでしょうか?他におすすめできるライブラリヘッダはありますでしょうか? (環境) ホストOS:cygwin-i686 ターゲット:sh-linux (elf) ビルドしようとしているGCC:4.3.3 binutils:2.19.51 newlib:1.19.0 (コンフィグレーション) configure --target=sh-linux --prefix=/usr --with-gnu-as --with-gnu-ld --with-headers=(newlibのlibc/include) --with-newlib 以上です。よろしくお願いいたします。

  • Cygwinで日本語化け(UTF-8)

    web上の情報を元にnkfとmoconv.shを入れてShift-JISエンコードの日本語が文字化けしなくなったんですが、UTF-8エンコードのファイルが依然文字化けします。 テストするためにsjis.htmlとuft8.htmlを作って、↓な感じでやってます。 >export LANG=ja_JP.SJIS >cat sjis.html 日本語がちゃんと表示されます。 >export LANG=ja_JP.UTF-8 >cat utf8.html 文字化け どなたかご存知でしたら教えてください。

  • puttyの日本語版において、SJISファイルが文字化け

    (概要) puttyの日本語版をインストールしたのですが、SJISモードにしても、SJISのファイルを開いた際に、文字化けが発生してしまいます。 (詳細) (1)puttyの設定 ウィンドウ→変換においてSJISモードを設定 (2)サーバー上において、環境変数をLANG=ja_JP.ujisおよびLANG=ja_JP.SJISに設定 上記の設定(1)、(2)で、SJISファイルを開くと文字化けが発生します。 ちなみに、ウィンドウ→変換においてEUC-JPモードを設定し、環境変数をLANG=ja_JP.eucjpに設定した場合に、EUCのファイルを開いた際には、文字化けせずに表示できます。 原因および対処方法がお分かりになる方がいらっしゃいましたら、ご教示をお願いいたします。

  • Shift_jis設定しているのに文字化けする

    HTML初心者です。よろしくお願いします。 環境は、Windows7、ezhtmlというHTMLエディタを使って制作しています。 FFFTPにて、ホームページをアップしています。 下記の内容を書いてあります。 <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>わたしのホームページ</title> </head> エディタで作業して、プレビューしても文字化けはしていませんが、 Webにアップして、IE8のブラウザで見ると、文字化けしてしまいます。 他のPCで見ても同じ現象がおきました。 「わたしのホームページ」という言葉は文字化け状態になり、 ブラウザの表示→エンコード→Unicode(UTF8)になっているので、 それを日本語(シフトJIS)になおすと、正しく表示されます。 何が原因で、設定したシフトJISが有効にならないのでしょうか。 よろしくお願いします。

  • EUC補助漢字とShift_JIS2004が扱えるテキストエディタ

    私はEmEditorを愛用していますが、EUC-JPでエンコーディングされたJIS X0212補助漢字が表示できなくてたまに困ります。 また、それとは別に、JIS X0213:2004の文字が扱えるというShift_JIS2004に興味があります。 この2つが読み書きできるフリーのテキストエディタ(それぞれ別で構いません)はありませんか? また、フリーでない場合も参考までに教えてください。 Windows環境で動くことが望ましいですが、フリーならLinuxでも一応OKです。 なお、Unicodeでこれらの文字を扱うのはEmEditorで実現できているので大丈夫です。