tar zxvf gsl-1.15.tar.gz cd gsl-1.15 ./configure --disable-shared make make install(三)以上でインストールされた
C:\Min
GW\msy
s\1.0\
local\
includ
e
内のgsl
フォルダをC
:\MinG
W\incl
ude
にコピーする.
(四)同様にインストールされたC:\M
inGW
\msy
s\1.
0\lo
cal\
lib
内のlib
gsl.
a, l
ibgs
lcbl
as.a
の2つのファイルをC:\
MinG
W\li
b
にコピーする.
#include <stdio.h> #include <gsl/gsl_sf_exp.h> int main(void) { printf("e = %20.12e\n", gsl_sf_exp(1.0)); return 0; }(三)アクセサリ内のコマンドプロンプトを起動し,
cd "My Documents\gsl"とディレクトリを移動して,以下のコマンドを入力する.
gcc -Wall test_gsl.c -lgsl -lgslcblas最初の
-W
all
は,コンパイラが警告をすべて出力すると言う意味で,gccを使うときはいつも指定すると良い.
後ろ2つの-
lgs
l
, -lg
slc
bla
s
はGSLのライブラリを実行プログラムにリンクする指定です.
作成したプログラムに誤りがなければ,何も出力がなくプロンプトが返ってくるので,
a
と実行する.
なお,gccでの実行ファイルは,コンパイル時に"-o"オプションで指定しない限り,いつでもa.exeである.
プログラムが問題なく作成されていれば,
e = 2.718281828459e+000のように出力されるはずです..
tra
pfp
e-w
ind
ows.
c
を記述する.
#include <float.h> static void __attribute__ ((constructor)) trapfpe () { _controlfp( ~(_EM_INVALID|_EM_ZERODIVIDE|_EM_OVERFLOW), _MCW_EM ); }(二)
tra
pfp
e-w
ind
ows.
c
を以下のようにコンパイルして,lib
tra
pfp
e.a
を作成する.
(前述の octave-gcc-setup.bat で Octave の開発環境を利用する場合は,"C:\MinGW\include" の代わりに,"%octave_path%\mingw32\include" としてください.)
> gcc -c -isystem C:\MinGW\include trapfpe.c -o libtrapfpe.a(三)上記のように作成した
li
btr
apf
pe.
a
をC
:\M
inG
W\l
ib
にコピーする.
(前述の octave-gcc-setup.bat で Octave の開発環境を利用する場合は,Octaveのインストール・ディレクトリの下の "mingw32\lib" にコピーしてください.)
(四)NaNやInfの発生場所を特定したいプログラム(例えばhoge.c)をコンパイルするとき,以下のように"-g"オプションと"-ltrapfpe"を指定して,デバッグオプション付きでlibtrapfpe.aをリンクした実行ファイルを作成する.
> gcc -Wall -g hoge.c -ltrapfpe(五)作成したa.exeを引数としてgdbを実行する.
> gdb a.exe(六)(gdb) というプロンプトが出たら run と入力して,gdb内でプログラムを実行する. (実行時に引数が必要であれば,run の後ろに指定する.) (七)InfやNaNが発生したらSigFPEが発生してプログラムが停止し,発生した場所の関数名,ソースファイル名と行番号,および発生した行が表示される. もし,これらの情報が表示されない時は,エラーを起こした数学ライブラリ(libm)の関数の中なので,(gdb) というプロンプトの後にupと入力して,その数学関数を呼んだ関数に制御を移すと,上記の情報が表示される. なお,gdbはデバッガなので,変数の値を表示する("print 変数名")などデバッグに便利な機能をたくさん備えています. gdbの機能についてさらに詳しく知りたい人は,マニュアルなどを調べて下さい. また,gdbを終了させるコマンドは"quit"です. "quit"を入力すると,
The program is running. Exit anyway? (y or n)というメッセージが出力されて応答待ちとなるので,"y"を入力してgdbを終了させてください.
gcc -Wl,--stack,10485760 hoge.c上記は10485760Byte=10MBの指定です.1つの変数が占めるメモリは,倍精度実数が8バイト,倍精度複素数が16バイト,整数が4バイトであることより必要なスタック領域を見積もり,余裕を持った値を指定して下さい. なお,kやmなどの修飾子は指定できません. こんなオプションを毎回指定するのは大変なので,次に自動化の手段を考えます. バッチファイルなどの手段もありますが,標準的にはmakeを使います. 筆者が別ページに書いた記述を参考にこの場合のmakefileを書くとこのようになります. なお,MinGWにおけるmakefileはLinuxにおけるmakefileと以下が異なるので注意する必要があります. ●実行ファイルとして,この例ではtago.exeが生成されるにも関わらず,:の前のターゲットには拡張子(.exe)なしで記述しなければならない. ●Windowsではファイル名の大文字・小文字を区別しないので,ターゲットも大文字・小文字を区別しない. ●実行プログラム名はmakeではなく,mingw32-makeである. また,上記のようなmakefileを使う場合には,ソースファイル︵複数のファイルがある場合には,どれか1つ︶の拡張子を.exeに変更したものを実行ファイル名としなければなりません. Last update: 2012.3.19 [機械力学研究室ホームページに戻る] [数値計算に関する情報のページに戻る]