C++ on Cygwin
Save your time, save your disk....
2004.02.13 Version by Fut:
Since 2002.12.24


[Fut's Home | Contents | Cygwin | Geant4 ]

概要: Cygwin上のC++環境について調査する。 特に、 (MSVC++が前提である)Geant4 への応用を念頭に置き、 デフォルトで入っているGNU g++や、 MinGWGtkまで?) 等について考察する。

Index Top

[2k]CygwinデフォルトのC++環境

 Cygwin上でGeant4を構築しようと思ったら、 MSVC++が前提 のようであり、このことは結構頑なな感じがする。 MSVC++とか 本気で導入 しようものなら、あまりに高価であり現実離れしている。 また、乗せるPCのスペックが問題になるとか、 自分自身が難解すぎて諦めたような時のリスクが大きすぎる。

 しかしながら、 これまでC++言語についてきちんと見ようとしたことがなかったので、 これを機会に手を動かして勉強するのは無駄ではない。 その際、Cygwinデフォルトで入っているC++言語に触ることは、 その可能性と限界を評価する上でも、寄り道していいかも知れない。 また、その際の経済的なリスクもない。
そのため、日本Geant4ユーザ会からリンクされ、絶賛されていた C++入門 のページに従って見ていく事にする。

 manでは、gccの項目で、C及びC++コンパイラ という書き方がしてあるが、*.cppをコマンドラインから gccでコンパイルするとエラーとなる。 調べたら、c++がC++コンパイルのコマンドのようであり、 さらにこれはシンボリックリンクであって 実体は(/usr/bin/)g++であることが分かった。 以下、目についたものをまとめる。  と、いうことで、無事、
$ g++ hello.cpp
が完了し、ついでに、 MinGW でコンパイルして、
$ g++ -mno-cygwin hello.cpp
“おぉ、Windows側に何のパスも切っていないのに、 a.exeがダブルクリックで開く!”と感動したりした (但し、速すぎて文字は肉眼では確認できませんでした)。

 さて、そこで、既に問題発生。 類題として、日本語文字の表示があるが、これが表示されない。 『Cygwin環境構築ガイド(ISBN4-7980-0673-4)』 にも詳しく出ているが、Locale設定の問題らしく、 意外と根深い。 SJISのカタログファイルがないので、 デフォルトで存在するja_JP.EUCから作成するのが 筋らしい。
 前述の書籍(Cygwin環境構築ガイド)の付録CDにも添付してあるが、 世の中にはありがたい人がいるもので、
Cygwin で便利! には、 Project HeavyMoon.(重月計画) の成果を取り入れて、一気に初期設定してくれるものらしいです。 とは言え、何をやっているかを理解しながら進まないと、 問題にぶつかった際に困るので、 中身を見ながらひとつひとつ進むことにする。
 ポイントは“catalogue-euc2sjis”を実行することであり、 その本質はnkfによる漢字コード変換 (と、独自のエスケープコード処理)のようだ。 nkfのコンパイルはこれまで何度もやってきたので、 rpmコマンドの練習として、バイナリからセットをしてみる。 全自動のk-square.cygshより該当部分を抜き出して実行 (余計なことをしているかも知れないが)。
$ cd rpms/
$ rpm -i --nodeps --force --ignoreos --ignorearch nkf-1.92-2.i686-cygwin.rpm >/dev/null 2>&1
これでnkf/usr/bin/nkf.exeにインストールされ、 man nkfも表示されるようになった。
 次に、肝心のEUC⇒SJIS変換作業を行なう。 用意されているシェルスクリプトを実行するだけなのだが、 vimのヴァージョン・アップがあったようで、 vim61⇒vim62の修正のみ予め行なっておく。
$ cd rpms/
$ rpm2cpio gettext-0.10.35-6.i686-cygwin.rpm | cpio -id
$ cd usr/bin/
$ cp msgfmt.exe ../../../catalogue-euc2sjis/
$ cp msgunfmt.exe ../../../catalogue-euc2sjis/
$ cd ../../../catalogue-euc2sjis/
$ cp converter.cygsh converter.cygsh.origin
$ sed 's/vim61/vim62/' converter.cygsh.origin > converter.cygsh
$ ./converter.cygsh
Done. Execute follow commands to Check SJIS message catalog.
'export LANG=ja_JP.SJIS'
'grep --help'
最後に得られるメッセージのとおり実行すると、 きちんとヘルプが日本語で表示された。 (2003.12.24)

 さて、この状態で レッスン へ戻ったが、やっぱり日本語が文字化けする。 しかし、今回nkfが入ったのでnkf -sできちんと表示されるところをみると、 日本語環境をいじる前に作成・編集されたソースなので 本当に漢字コードが違っていたようだ。
 これで、順調に講座を読み進められるようになった。 (2003.12.25)

 非常に評判の高い書籍 『Cygwin+Cygwin JE Windowsで動かすUNIX環境(ISBN4-7561-4305-9)』 が届いた。さすがに決定版だ。いい。 しかしながら、前述の書籍(Cygwin環境構築ガイド)も良いと思う。 これらの書籍がきちんとメンテされて行けば、 (昨日のようにおっかなびっくりメモを残しながら試行錯誤するのではなく) もっと気軽に色々なことにチャレンジできる。 (2003.12.26)

[XP]日本語化手順のまとめ

 これまでのおさらいを兼ねてXPで同様の作業を再現する。
  1. ~/.bashrc』の最後に “export LANG=ja_JP.SJIS”という行を追加。
  2. ~/.inputrc』に次の行を追加。 (上から3つだけでいい。後は僕自身の覚書。)
    1. # 8bit文字の変換機能を無効にする。
      set convert-meta off
    2. # 8bit文字の入力を有効にする。
      set input-meta on
    3. # 8bit文字の出力を有効にする。
      set output-meta on
    4. set meta-flag on
    5. # 日本語化されたbashのための設定。
      set kanji-code sjis
  3. 先ずLVをいれるか。 作者が卒業したらしく、アドレスが変わっており、以前から随分版が進んでいる。
    一時的に「export LANG= 」などとして、警告を英語にした方が良かった。 (この時点では文字化けして警告内容が読めない。 また、取敢えず「$ make install」は出来ないので手動。)
    ~/.bashrc』に “export LV="-Ks -Os -c"”という行を追加。 しばらくは、「… | lv」にお世話になる。
  4. 今回はnkfをソースから作る。 どこからがいいか? 『SourceForge』がメインのようだが、 少し冒険して 最新版nkf に手を出してみる。 特に問題なし。テストもOK。インストールは手動。
  5. そして、SJISのカタログファイル作成。 この作業も、一時的に「export LANG= 」などとした方がいいかも知れない。
    なお、この作業は前述の2書籍の付録CDにも結果あるいはスクリプトが掲載されている。 特に、後者の場合、 公式/非公式のサポートページが沢山あり( 1 2 3 )、本件に関するスクリプト(moconv.sh)も、 Cywin JE 関連のところ に見られた。 このスクリプトは(nkfのセットアップさえ済んでいれば) 他に何もする必要がなく、ただ実行すればよい。 但し、僕自身で入れたnkfのパスの記述は、現状に合わせて
    NKF=/usr/bin/nkf

    NKF=/usr/local/bin/nkf
    と修正する必要があった。
(2003.12.27)

Index Top


Home
--
Written by Fut.