Cygwin + Cygwin JE サポートページ

(限定バージョン)

はじめに

これは2003年6月に(株)アスキーより発売されました「 Cygwin+Cygwin JE−Windowsで動かすUNIX環境」のサポートページです。 (株)アスキーによる公式なものではないことなどから 「限定バージョン」とさせていただきます。

もくじ


よもやま話

ここでは本書やCygwinに関連するいろいろなことを書いてみようと思います。

想定読者層

以下は私見ですが、他の著者やアスキーの意向とは若干違うところがあるかもしれませんが そんなに大きく違わないはずです。

先行するCygwin本(ソフトバンク本、D-art本)はおそらくUNIX入門者をメインターゲットに しているものと思いますが、本書の場合はUNIXコマンド一般は知っていて一応は使用できる人を 想定しています。したがって、先発本にあるような「UNIXコマンド解説」はほとんど行って いません。Cygwin環境独自の話題やCygwin環境のクセに対する記述に力を入れ、導入部分 (インストール方法や環境設定)と少々突っ込んだ解説(Windowsのセキュリティや Cygwinコマンド解説)を充実させています。

"Cygwin JE"について

付属CD-ROMには本書の共著者である佐藤氏により構築された"Cygwin JE"を 収録しています。これは日本語環境で有用なアプリケーションのソースやそれらをCygwin環境下で コンパイルするためのパッチをもとに、setup.exeを利用して導入できる形で佐藤氏がパッケージ化 したものです。内容的にはすでにあちこちのWeb上で公開されていたり "X on Windows"のパッケージに含まれているものがほとんどですから、 この"Cygwin JE"を目的に本書を購入するのは、正直あまりおすすめしません。 というか、そういう人にはこの本は高価に感じられるのではないでしょうか?

"Cygwin JE"の入手が目的であれば、佐藤氏によって公開されたhttp版 を入手するほうがよいかもしれません。

「Windows 2003 Server 日本語版」での動作

本書に収録されているバージョンのCygwinは動作しません。 バージョン1.5.0以降のCygwin(cygwin1.dll)であれば使えるかもしれませんが、 私は現在「Windows2003 Server日本語版」を試用できる環境にないので確認できていません。
聞いたところでは、bash は動作しないがそれ以外は動くらしいです。

コマンドリファレンス

あの分類は、開発者向けはともかくあとは結構適当というか完全に主観に基づいています。 まあアクセス権が設定された環境のユーザか管理者でなければふつうはsetfaclなどは 使わなさそうなのでああなっています。

いくつかのコマンドやオプションの説明は誌面の都合で削除されました。特に、開発者向けの ところではdlltoolのみ残っていますがこれはどうにか押し込むことができました。 その他のコマンドについてはコマンド名だけ冒頭にあげていますが、これはまともに機能しない コマンドがあるのでそのことに関する注釈を入れたかったのが個人的な理由です。

インストーラ

「2ちゃんねる」のCygwinスレッド(UNIX板)では「なぜインストーラが日本語化されていない のか」という声もありました。これはそもそも検討自体していなかったと思いますが、 (後付けの)理由としては以下のようなことがあります:

先行するソフトバンク本のような、UNIX入門者をターゲットとする形態であれば「メッセージが 日本語化されたインストーラ」を収録するのもいいかと思いますが、前述の理由から今回の この本には必要とはあまり思っていません。

単純な誤り

以下の校正漏れや修正ミスを確認しています。
※ 一部ではすでに第二刷が流通しており、そちらではいくつかは修正済みです。

他にも見つかりましたらお知らせください。
※ 3ページ目の日付が「2002年5月」なのは有名なので 言わなくていいです…

差し替え

参考までに、校了に間に合わなかった記事の個人的修正版を公開します。
※ 一部ではすでに第二刷が流通しており、そちらでは差し替えられている記事もあります。

追加情報

締め切り等の都合で本文に入れられなかった情報を示します。

<cygrunsrv コマンド>

コマンドリファレンスで説明していないオプション"-Q"があります。

その他

参考のために用意した補足情報です。書籍本文とあわせてお読みください。

Windows XP Home Edition (WinXP Home)での使用上の注意

WinXP Home の場合、Windowsのログオンに使用するユーザ名を変更することは できません(コントロールパネルから変更できるのはユーザの氏名情報です)。 これは WinXP Home の仕様です。

従って、WinXP Home をご利用ですでに「ユーザ名が日本語文字のアカウント」で使用している 場合は別の新しいユーザを作成する必要があります。ちなみに、WinXP Professional では 欄外注にある通り、管理ツールを使用してユーザ名を変更することができます。

Cygwinの商用ライセンス(p18)

説明文では「Cygwinを利用するアプリケーションを、 ソースコードを開示せずに配布するような場合」とかかれていて、 箇条書きのところが「Cygwinを商用利用する場合は〜」となっています。 これはもちろん、 「Cygwinを利用するアプリケーションを、ソースコードを開示しないで配布するような 場合はRedHatからライセンスを別途購入する必要がある」というのが正しい説明です。 GPLの要件を満たすかどうかと、それが商用利用かどうかは無関係です。

<ここからGPL一般の話>

GPLのもとでライセンスされるソフトウエアを有償で頒布しても何ら問題ありませんし、 ふつうに行われています。 もっとも、コストに比してあまりにも法外な額の金銭を得ようとするのは 無理があるでしょう。
また、たとえばあるプロセッサ用にカスタマイズしたGCCをプロセッサのメーカAに 有償で提供する際、「カスタム版GCC」の開発者は、「カスタム版GCC」をメーカA 以外に全く公開しなくても(メーカAとの間でそのような契約を締結しても)、 GCC自体のライセンスがGPLのままなのであれば問題ありません。 メーカAも、開発者から得た「カスタム版GCC」を社外に公開しなくてもGPLには違反していません。 ただし、もしメーカAが社外に対しても(あるいは開発者がメーカA以外に対しても) 「カスタム版GCC」を公開する場合はGPLに従って、 バイナリパッケージとともにそのソースコードも、 バイナリパッケージを入手した人が望むなら入手できるようにしないといけません。

参照: FSFによる説明

DLLの構築事例(p291)

gccの"-shared"オプションを用いないでDLLを 構築しようとしてもp291の例のとおりにはいかないかもしれません (この例はdlltoolコマンドのオンラインマニュアルにあるがままです)。 実際にそれで困ることはないかと思いますが、興味があるかたのために "-shared"オプションを用いない場合の例を示しておきます。

p292にあるhello-dll.cのソースに次の記述を追加してください。 #include文の次あたりでいいでしょう。

asm (".section .drectve");
asm (".ascii \"-export:hello\"");

以下の手順でコマンドを投入します。同じようなことを2回やっているように見えますが、 リロケータブルなDLLを作るためにこうしています。

$ gcc -c hello-dll.c
    ── オブジェクトファイルを生成
$ dlltool --dllname cyghello.dll -z cyghello.def -e exports.o -l libhello.dll.a hello-dll.o
    ── エクスポートシンボル定義ファイル、エクスポートファイルを生成
$ gcc -mdll -o junk.tmp -Wl,--base-file,base.tmp hello-dll.o exports.o
    ── ベースファイルを生成(この後"junk.tmp"は不要)
$ dlltool --dllname cyghello.dll --base-file base.tmp --output-exp _temp.exp --def cyghello.def
    ── エクスポートファイルを生成(この後"base.tmp"は不要)
$ gcc -mdll -o cyghello.dll hello-dll.o -Wl,_temp.exp
    ── DLLを生成
$ gcc -o hello main.c -L. -lhello.dll
    ── 試しに、DLLを使うプログラムをコンパイル

このようにしてDLLを構築できますが、実際にはp292のように gccの"-shared"オプションで済ませる方が はるかに簡単でしょう。なお、"-shared"オプションでDLLを 構築した場合はインポートライブラリが構築されません。DLLとは別に用意する必要が あるなら Cygwin User's GuideBuilding and Using DLLs に示されている次のようなコマンドを実行すればよいでしょう。

gcc -shared -o cyg${module}.dll \
    -Wl,--out-implib=lib${module}.dll.a \
    -Wl,--export-all-symbols \
    -Wl,--enable-auto-import \
    -Wl,--whole-archive ${old_lib} \
    -Wl,--no-whole-archive ${dependency_libs}

ここで、"${module}"は 構築するDLL名、"${old_lib}"は 全てのオブジェクトファイル (スタティックライブラリに含まれるオブジェクトファイル、 単体のオブジェクトファイル)、 "${dependency_libs}"は リンクに必要なインポートライブラリを(あれば)指定します。

Emacsによる日本語入力

Emacs をインストールしただけでは、WnnやCannaによる日本語入力はできません。 (Emacs の仕様)

WnnやCannaを用いて日本語入力を行うには、 TamagoYC のようなEmacsLispパッケージ を自分でインストールして適切に設定する必要があります。

Cygwinは、管理者によって適切な設定が行われたUNIXマシンでもなければ、 必要なソフトウエア込みでインストールできるLinuxディストリビューション でもありません。日本語を扱う上で必要なものは自分で導入する必要があります。

関連リンク

「Cygwin+Cygwin JE」に関するリンクを次に示します。

このページの更新履歴


いけだ やすし
docile-AtMark-docile.org