Fortran2003でFFTW Windows編
これまでサンプルを
Fortran2003でFFTW、
include修正
と上げてきましたが、これはLinuxの話でした。ではWindowsでやってみましょう。
ソースコードは同じで大丈夫。system関数など使っていないので。
まずライブラリを入手します。
http://www.fftw.org/install/windows.html
zipで落としてきます。で、中に.f03と.dllがあるのを確認。
デスクトップに解凍しておくと、僕の環境ではパスは
C:\Users\sage\Desktop\fftw-3.3.3-dll64
となりました。この中に
- fftw3.f03
- libfftw3-3.dll
正直ビルドするだけならリンクのパスを指定するだけでコピーする必要がないのですが、実行時に必要になるとき、パスを通してないとdllを読み込んでくれません。またWindowsにはdllをレジストリに登録するコマンドがありますが、このfftwのdllはそれが使えません。ていうかWindowsのプログラムのフォルダ見てると結構dllをがめてるので、これくらいはいいでしょう。ただヘッダまでコピーする必要はないかと思います。ファイル名、自分のソースコードとニアミスしてたし。
次に、コンパイラを用意します。
Windows向けのgfortranバイナリを拾ってきます。gfortranが基本的なライブラリとか、ほかのプログラムを使う可能性があるんで、gfortranだけ特に取ってくるよりは、何かに入ってるものを使ったほうがいいでしょう。gfortranがついてくるパッケージとして、
- Cygwin
- MinGW
- msys
- strawberry perl
あ、以下の作業はコマンドプロンプトでやりましょう。
最初に、作業フォルダの確認。ソースコードとdllがあるはず。
C:\hogehoge> dir (中略) 2013/08/18 17:03 <DIR> . 2013/08/18 17:03 <DIR> .. 2013/08/18 20:40 1,190 fftw.f03 2013/08/18 19:04 4,893 func.f03 2012/11/25 08:28 2,662,451 libfftw3-3.dll
準備ができたので、まずビルドします。
C:\strawberry\c\bin\gfortran.exe -c func.f03 -IC:\Users\sage\Desktop\fftw-3.3.3-dll64 C:\strawberry\c\bin\gfortran.exe -c fftw.f03 C:\strawberry\c\bin\gfortran.exe -o fftw fftw.o func.o -L. -lfftw3-3インクルードはデスクトップに解凍したまま放置しているフォルダ。もしインクルードするファイルも作業フォルダにコピーしてきた場合、-I以下はいらないです。リンクはライブラリをコピーしてきたのでカレントディレクトリということで、-L.。
次に、inputファイルを作ります。seqとawkはさすがにperlにはなくて、msysに入っているものを使いました。
echo 1 > input.txt echo 4096 >> input.txt C:\MinGW\msys\1.0\bin\seq.exe 0 4095 | C:\MinGW\msys\1.0\bin\awk.exe '{printf("%f\n",cos($1/31.415926))}' >> input.txt
最後に実行します。
fftw.exe < input.txt > output.log結果をWindows版のgnuplotなどで確かめてみましょう。
Windowsでも快適なFortran2003&フーリエ変換ライフを。
(追記)
苺perlのgfortranでは.dllでもいいのですが、MinGWなどでは.aのライブラリでなくてはいけません。ということで作り直すのですが、
http://d.hatena.ne.jp/arakik10/20100504/p1
によると
C:\MinGW\bin\dlltool.exe --dllname libfftw3-3.dll --input-def libfftw3-3.def --output-lib libfftw3-3.aでできます。 libfftw3-3.defが必要ですが、fftwのライブラリ解凍したら一緒に入ってると思います。なくなっても、上のページに作り方が書いているので大丈夫かと。
libfftw3-3.aさえ作ってしまえば、あとは同じコマンドでビルドできます。
目次に戻る