cygwinとは、要はwindows環境でUNIXを使えるようにするものです(無料)。もう少し突っ込めば、GNUのツール群をWindowsに移植し、それを用いてソースをコンパイルし直せばサーバプログラムなどもWindowsで動くというココロです。インストールは本家のページからsetup.exeというのを拾ってくれば、ネットワーク越しに色々設定してくれるのでラクです
cygwinとは関係ないが、似た効能がある。必要最小限な手軽さが良い。
大抵はisoなる拡張子がついているCDイメージを作りたいことがある。中にはライティングソフトにその機能がついている場合もあるが、cygwinで作成可能。
dd if=/dev/scd1 of=image.iso
でOK。scd1の数字は環境によって変化するので要確認。
以下を参考にした。
cygwinでXサーバを動かすことも可能です(感動モノです)。@ITの「真ゼロ円でできるXサーバ」 が参考になります。
とはいえこのあたりは変化が激しいので、既存の解説文書をアテにしすぎてもいけません。
デフォルトではwindows付属のコマンドプロンプトが端末となるが、機能やフォントで何かと制限があって使い勝手が悪い。対策としては
などがあるようだ。現在のところ、ck(cko)を用いて以下のリンク先を持つショートカットを作るのが自分的に都合が良い。
D:\cygwin\bin\cko.exe -fn "好きなフォント名" -fs 12 -e bash --login
古めなので、ひょっとしたらもう役に立たないかもしれません。
Bash shellのビープ音は、ウィンドウズ処方箋の中のビープ音をやめたいのですがを参考にして無効にできました。
Xが動くので、ウィンドウマネージャも選ぶことができます。cygwin用のパッケージを持つものもあるようです。 私はfluxboxを使っています。インストールの際は、cygwinのsh.exeがgetoptsを解釈せずmakeがコケるので、 /bin/sh.exeを消して同名で/bin/bash.exeへリンクを張りなおしたらうまくいきました。
上に挙げた@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:
線型代数計算のライブラリとして高名な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