cygwinとは、要はwindows環境でUNIXを使えるようにするものです(無料)。もう少し突っ込めば、GNUのツール群をWindowsに移植し、それを用いてソースをコンパイルし直せばサーバプログラムなどもWindowsで動くというココロです。インストールは[[本家:http://www.cygwin.com]]のページからsetup.exeというのを拾ってくれば、ネットワーク越しに色々設定してくれるのでラクです
 
 *link [#b96b8798]
 -[[Cygwin Information and Installation:http://www.cygwin.com/]] 公式
 -[[cygwinで行こう:http://www.okisoft.co.jp/esc/cygwin.html]] UTF-8 cygwinなど、有用な情報が豊富
 
 
 -[[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]] ちょっと古め
 
 *アンインストール [#gfa07f00]
 -[[Cygwin のアンインストール:http://www.amy.hi-ho.ne.jp/tachibana/cygwin/uninstall.html]]
 
 
 
 *NYAOS [#eb5c40bf]
 cygwinとは関係ないが、似た効能がある。必要最小限な手軽さが良い。
 -[[NYAOS Support Page:http://www.nyaos.org/index_ja.html]]
 -[[NYAOSを使おう!:http://childs.squares.net/program/text04.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