cygwinとは、要はwindows環境でUNIXを使えるようにするものです(無料)。もう少し突っ込めば、GNUのツール群をWindowsに移植し、それを用いてソースをコンパイルし直せばサーバプログラムなどもWindowsで動くというココロです。インストールは[[本家:http://www.cygwin.com]]のページからsetup.exeというのを拾ってくれば、ネットワーク越しに色々設定してくれるのでラクです

*link [#b96b8798]
-[[Cygwin Information and Installation:http://www.cygwin.com/]] 公式
-[[ck - terminal emulator:http://www.geocities.jp/cygwin_ck/]] 便利な端末
-[[cygwinを使う:http://www.mars.dti.ne.jp/~sohda/cygwin/]]
-[[Compile ! (^.^)v:http://www.netlaputa.ne.jp/~kose/Software/compile/index.html]] ちょっと古め

*CDイメージ吸い出し [#p4366666]
大抵はisoなる拡張子がついているCDイメージを作りたいことがある。中にはライティングソフトにその機能がついている場合もあるが、cygwinで作成可能。
 dd if=/dev/scd1 of=image.iso
でOK。scd1の数字は環境によって変化するので要確認。

以下を参考にした。
-[[/dev ファイルシステムと /proc ファイルシステム:http://www.sixnine.net/cygwin/cygwin-doc/devices.html]]
 

*X [#g62cb8e4]
cygwinでXサーバを動かすことも可能です(感動モノです)。[[@IT:http://www.atmarkit.co.jp]]の「真ゼロ円でできるXサーバ」
が参考になります。
-[[Cygwin/XFree86最新事情と日本語化:http://www.atmarkit.co.jp/flinux/special/cygwin2/cygwin01a.html]]
-[[Cygwin/XFree86でKDE & GNOME:http://www.atmarkit.co.jp/flinux/special/cygwin2/cygwin02a.html]]

とはいえこのあたりは変化が激しいので、既存の解説文書をアテにしすぎてもいけません。

*端末 [#m6d69a4d]
デフォルトではwindows付属のコマンドプロンプトが端末となるが、機能やフォントで何かと制限があって使い勝手が悪い。対策としては
-ローカルにSSHサーバ構築してお好みの端末でlogin([[PuTTYを使ってターミナルを使いやすくする。:http://bellbind.net/windows/putty.html]])
-[[CygTerm:http://www.dd.iij4u.or.jp/~nsym/cygwin/cygterm/]]
-[[ck - terminal emulator:http://www.geocities.jp/cygwin_ck/]]

などがあるようだ。現在のところ、ck(cko)を用いて以下のリンク先を持つショートカットを作るのが自分的に都合が良い。
 D:\cygwin\bin\cko.exe -fn "好きなフォント名" -fs 12 -e bash --login

*その他のメモ [#ob165211]

古めなので、ひょっとしたらもう役に立たないかもしれません。

**ビープ音 [#fc4c4424]

Bash shellのビープ音は、[[ウィンドウズ処方箋:http://www.winfaq.jp/]]の中の[[ビープ音をやめたいのですが:http://homepage2.nifty.com/winfaq/wxp/hints.html#977]]を参考にして無効にできました。

**fluxbox [#o442b7c4]
Xが動くので、ウィンドウマネージャも選ぶことができます。cygwin用のパッケージを持つものもあるようです。
私は[[fluxbox:http://www.fluxbox.org]]を使っています。インストールの際は、cygwinのsh.exeがgetoptsを解釈せずmakeがコケるので、
/bin/sh.exeを消して同名で/bin/bash.exeへリンクを張りなおしたらうまくいきました。

**lv [#k596a1d5]
上に挙げた@ITによる解説で日本語化に成功したため、ページャも日本語化しようと試み[[lv:http://www.ff.iij4u.or.jp/~nrt/lv/]]をインストールしました。
makeはすんなり通りましたが、実行するとtermcapに「ktermなんぞ知らん」と怒られたので、
[[Cygwinとおたわむれ:http://www.netlaputa.ne.jp/~kuno/cygwinmain.html]]というページを参考にして /etc/termcap に以下の記述を加えたらうまくいきました。
 vk|kterm|kterm kanji terminal emurator (X window system):\
 hs:es:ts=\E[?e\E[?%i%dT:fs=\E[?F:ds=\E[?H:tc=xterm:


**LAPACK [#oe278017]
線型代数計算のライブラリとして高名な[[netlib:http://www.netlib.org]]のLAPACKですが、cygwinでも使用可能です。インストールにあたって特別な操作も殆ど必要ありません。ソースを持ってきて展開し、LAPACKディレクトリに移った後、以下の様にします。

 $ cp INSTALL/make.inc.LINUX ./make.inc
 $ make blaslib
 $ make lapacklib

するとカレントディレクトリにライブラリができあがるので、それを適当な場所にコピーします。

 $ cp ./blas_LINUX.a /usr/lib/libblas.a
 $ cp ./lapack_LINUX.a /usr/lib/liblapack.a

これで使用可能となります。私はC++から使用することが多いのですが、externで宣言する際に関数名の後にアンダースコアをつけなくてはいけません。例えば以下の様にします。

 // Ax = b
 //
 // A = ( 3  2 -4)   b = ( -5 )
 //     ( 1 -7  2)       ( -7 )
 //     (-6  5  8)       ( 28 )
 //
 //     solution: x = ( 1 )
 //                   ( 2 )
 //                   ( 3 )
 #include<iostream>
 using namespace std;
 
 extern "C" {
     int dgesv_( int *n, int *nrhs, double *a, int *lda, int *ipiv,
     double *b, int *ldb, int *info);
 }
 
 int main(void){
     int n = 3;
     int nrhs = 1;
     double A[9];
     int lda = n;
     int ipiv[3];
     double b[3];
     int ldb = n;
     int info;
 
     A[0] =  3; A[3] =  2; A[6] = -4;
     A[1] =  1; A[4] = -7; A[7] =  2;
     A[2] = -6; A[5] =  5; A[8] =  8;
 
     b[0] = -5;
     b[1] = -7;
     b[2] = 28;
 
     dgesv_( &n, &nrhs, A, &lda, ipiv, b, &ldb, &info);
 
     cout << b[0] << endl;
     cout << b[1] << endl;
     cout << b[2] << endl;
 
     return 0;
 }

コンパイルの際のコマンドラインは以下のとおり。ライブラリへのパスが通ってないなら適宜Lオプションを加えます。

 g++ hoge.cpp -llapack -lblas -lg2c -lm