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

link *

アンインストール *

NYAOS *

cygwinとは関係ないが、似た効能がある。必要最小限な手軽さが良い。

CDイメージ吸い出し *

大抵はisoなる拡張子がついているCDイメージを作りたいことがある。中にはライティングソフトにその機能がついている場合もあるが、cygwinで作成可能。

dd if=/dev/scd1 of=image.iso

でOK。scd1の数字は環境によって変化するので要確認。

以下を参考にした。

X *

cygwinでXサーバを動かすことも可能です(感動モノです)。@ITの「真ゼロ円でできるXサーバ」 が参考になります。

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

端末 *

デフォルトではwindows付属のコマンドプロンプトが端末となるが、機能やフォントで何かと制限があって使い勝手が悪い。対策としては

などがあるようだ。現在のところ、ck(cko)を用いて以下のリンク先を持つショートカットを作るのが自分的に都合が良い。

D:\cygwin\bin\cko.exe -fn "好きなフォント名" -fs 12 -e bash --login

その他のメモ *

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

ビープ音 *

Bash shellのビープ音は、ウィンドウズ処方箋の中のビープ音をやめたいのですがを参考にして無効にできました。

fluxbox *

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

lv *

上に挙げた@ITによる解説で日本語化に成功したため、ページャも日本語化しようと試みlvをインストールしました。 makeはすんなり通りましたが、実行するとtermcapに「ktermなんぞ知らん」と怒られたので、 Cygwinとおたわむれというページを参考にして /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 *

線型代数計算のライブラリとして高名なnetlibの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

Last-modified: Sun, 01 Oct 2006 13:55:26 JST