[[山内の授業補完のページ/Windowsアプリ]]

***Cygwinの提供するもの [#fceee0ce]
Cygwinは、ホームページ(http://www.cygwin.com)にも書いてありますが、~
Cygwin is a Linux-like environment for Windows. It consists of two parts:~
A DLL (cygwin1.dll) which acts as a Linux API emulation layer providing substantial Linux API functionality. ~
A collection of tools which provide Linux look and feel.~

要するに、Linux (またはUNIX)と同じような環境を、Windowsの上で模擬して実現
する仕組なのです。Linux/UNIXの基本の環境はコンソール(文字端末)での操作、
ということで、コンソールで使うことになるわけです。

(注)もちろん、最近のLinux/UNIXはウィンドウシステム(X Window Systemと呼ぶ)
を使って、MS Windowsのウィンドウと同じような環境を提供します。
(歴史はX Window Systemの方がMS Windowsより古いのではないかな?
X Window Systemの簡単な説明は、たとえばhttp://ja.wikipedia.org/wiki/X_Window_Systemを参照)~
CygwinからX Window Systemを利用する(呼び出す)こともできます。具体的には
ツールキットと呼ばれるライブラリを用意して、そのライブラリの提供するAPI
(要するに関数)を利用することになります。ツールキットはLinux/UNIX環境で
いくつか用意されていて、それをCygwinで使えるようにした(ポートした)ものが
提供されています。~
但し、いずれもX Window 画面を表示した中で描画するものですから
MS Windowsの画面の中にX Window Serverの窓を開いてその中で利用することに
なります。直接MS Windowsの画面の中に書くものではありません。

では、Windowsの画面の上でウィンドウを使う(作って使う)にはどうすればいいか、
ということになります。ここではC言語(C++も含めて)に限定しましょう。
それでも、たくさんの方法があります。
-マイクロソフトの開発環境を使う。たとえばMS Visual Studio C++やC#などがあります。
-ボーランド社の開発環境を使う。
-cygwinから使う。
-minGWから使う。
よしあしは、人によって違うでしょうから、ここでは議論しません。たとえばマイクロソフトのVisual Studioは統合開発環境とさまざまなテンプレート(型紙?)を提供するので、決まった形のプログラムならばとても簡単に作れます。一部の環境は無料提供されていますが、一般には有料です。ボーランド社のものも統合開発環境です。

ここでは、既にCygwinを使ってきた人たちを対象として、Cygwinプラスアルファという形でのMS Windowsアプリケーションの作り方を紹介します。

では、Cygwinは何を提供してくれているのか、少し技術的な側面を見てみます。~
面倒な人は、残りは飛ばしてかまいません。

Cygwinは、最初に断ったように、MS Windows OS上でLinux/UNIXの環境を提供することが
目的です。その中でC言語のプログラム開発ができるのです。(思い出してください。
LinuxやUNIXの大半のコードはC言語で書かれていて、様々なツールもC言語で作られて
います。だからC言語を処理できることが必須なのです) 「Linux/UNIXの環境」と
いうのは、具体的には
+ Linux/UNIXのOS機能呼出し(システムコール)の実現と、
+ Linux/UNIXのOSの提供する様々なツール・ユーティリティの提供
です。前者はLinux/UNIXのOS機能呼出しを、MS WindowsのOS機能呼出しを使って
模擬実現しています。つまり、Linux/UNIXのOS機能呼出しをMS Windowsの呼出しへ
変換するような層を用意しています。(もちろん事はそう簡単ではないですが。)
後者は、前者が与えられているという前提で、様々なツール・ユーティリティを
コンパイルし直したものです。たとえば、まずコンソールの実現自体がツールの
1つです(bashという「シェルプログラム」が移されています)し、
コンパイラ(gccやその中で使う本体gcc、プリプロセッサcpp、リンカーldなど)
は、既に使ってきたものです。そのほか、Linux/UNIX上で使われている様々な
ライブラリ(sin, cosなどの数学ライブラリが例になります)、
アプリケーション(極端にはホームページサーバーapacheなどまで)も
Cygwin環境へポートされています。
実際のコード量は後者のほうがはるかに多いのですが、前者がCygwinの「ミソ」
になっているわけです。

では、アプリケーションプログラムを作る立場から見るとどう見えるか。
Linux/UNIXのアプリケーションをそのままCygwinで動かすには、Cygwinの
提供するOS機能呼出しを利用するように設定する(コンパイルする)ことと、
Linux/UNIXのツールを使う場合にはそれを利用するように設定する(コンパイル・
リンクする)ことが必要です。これらは、Cygwinでgccを使うときの
デフォルト(黙っているとこうなるという設定)になっています。

もし、アプリケーションプログラムがMS Windowsの持つ機能を使いたければ、
MS Windows機能の呼出しの仕組を追加する必要があります。いろいろな呼出し
レベルがあるのですが、たとえばもっとも原始的な呼出しの仕組(API)である
Win32 APIを使ってみるという方法があります。Win32 APIの簡単な説明として、
たとえばhttp://ja.wikipedia.org/wiki/Windows_APIがあります。

ここで注意しなければならない点があります。もしWin32 APIを使うとすると、
(1)CygwinのサービスとWin32のサービスが衝突するものがある、(2)衝突はしないが、
Cygwinのサービスで(MS Windowsのウィンドウ環境で実行するアプリケーションとして
見ると)余分なものがある、という点です。つまり、Cygwinが作ろうとしている
環境のうち、Win32 APIの環境にぶつかる部分や不要な部分が出てくるということです。

これらは、取り除いてやる必要があります。Cygwinでは既にこのようなユーザの
ために、ぶつかる機能・不要な機能を盛り込まないオプションを用意してくれて
います。そのオプションは、gccのデフォルトではないので、あなたが自分で
指定する必要があります。それが注意点です。

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS