cygwinからWindows64bit上で動くgslライブラリを作る。 mingwとcygwinの連携

(1)まず、gslのソースをもってくる
http://ftp.jaist.ac.jp/pub/GNU/gsl/
(2)次にコンパイル

./configure --host=x86_64-w64-mingw32 --prefix=/cygdrive/c/gsl CC=x86_64-w64-mingw32-gcc.exe CXX=i686-pc-mingw32-g++.exe
make
make install

configure の意味は

configure --help

を参考に。
コンパイラをCC=x86_64-w64-mingw32-gcc.exe をしておくこと(mingw64bitのコンパイラ)、
環境を x86_64-w64-mingw32 (mingw環境)
としておくことがポイント。
mingwがない場合はそれっぽいものをsetup.exeから落としてくることができる。

参考サイト
mingw な ruby2.0 を cygwin 上でビルドする
http://qiita.com/hidachinoiro/items/19d2083ecc1bb72e3ccd
http://www.bookshelf.jp/texi/autoconf-ja/autoconf-ja_13.html
configure host bild の違い
http://d.hatena.ne.jp/maminus/20100129/1264781242

(3)PATHの設定。Windowsの(システム)パスにc:\gsl\bin を加えておく。
   コントロールパネル->システム環境設定->環境変数
注意:WindowsにはユーザーPATHとシステムPATHがあるので注意が必要。

おそらくこれでOK.

(4)テスト

#include <stdio.h>
#include <gsl/gsl_rng.h>
#include <gsl/gsl_randist.h>

void main(){
 const gsl_rng_type *T;
 int i;
 gsl_rng *r;
 double sigma=1;
 double mean=0;
 int number=100;
 double v;
 //gsl_rng_setup();
 T = gsl_rng_default;
 r = gsl_rng_alloc(T);
 gsl_rng_set(r,2);
 for(i=0;i<number;i++){
 v=gsl_ran_gaussian(r,1.0);
 printf("%lf\n",v);
}

}

コンパイル (cygwin上)

x86_64-w64-mingw32-gcc gsl_test.c -I/cygdrive/c/gsl/include -L/cygdrive/c/gsl/lib -lgsl -o a2.out

実行 (cygwin上)

./a2.out

結果

  • 1.303106

0.641980

  • 0.652074
  • 1.767485
  • 0.917929

0.650857

  • 0.909848
  • 0.140926

0.780644
1.158559