Gfortran

gfortran

gfortran をとりあえずhpc.sourceforge.net から入れていたが、最近MacOSX用にパッケージ化してくれたヒトがいるらしい。しかしいれてみると

gfortran -O2 -fno-range-check -c fftsg.f 

dyld: Library not loaded: /usr/lib/libiconv.2.dylib Referenced from: /usr/local/bin/gfortran 

Reason: Incompatible library version: gfortran requires version 7.0.0 or later, 

but libiconv.2.dylib provides version 5.0.0

というエラーが出て止まるようになった。これはいかん。とりあえずlibiconv.2.dylib で検索をかけてみると、

http://homepage.mac.com/matsuan_tamachan/software/LibIconv.html

というページが出てきた。これを見て最新版をインストールする。ついでに

$ export DYLD_LIBRARY_PATH="/usr/local/lib"

を入れて新しい版を認識するようにしてみたが、今度は

gfortran -O2 -fno-range-check -c fftsg.f make[1]: *** [fftsg.o] Bus error make: *** [double] Error 2

が出て止まる。元に戻す。

ifort install

intelでもfortranを出している。

http://www.intel.com/cd/software/products/asmo-na/eng/282048.htm

これが Intel Mac だと最適化して非常に早くなるという噂を聞いたので、評価版をダウンロードして入れてみる。これはインストーラが付属していて特に問題なし。とりあえずMakefile でコンパイラをifortに変えると

fortcom: Error: fortmain.f, line 32: Syntax error, found END-OF-STATEMENT when expecting one of: 

= .EQV. .NEQV. .XOR. .OR. .AND. .LT. < .LE.  ...

        dimension u(imax,jmax), v(imax,jmax), eig_u(imax,jmax), eig_v(imax,jmax)

--------------------------------------------------------------------------------^

compilation aborted for fortmain.f (code 1)

make: *** [fortmain.o] Error 1

というエラーが出て止まる。ためしに、

gfortran fortmain.f

をかけてみると、

fortmain.f:32.72:

       dimension u(imax,jmax), v(imax,jmax), eig_u(imax,jmax), eig_v(ima

                                                                       1

Error: Expected another dimension in array declaration at (1)

が出て止まる。ほぼ同じ場所で止まっているようだ。ということは、Makefile に入っている-ffixed-line-length-noneが効いているようだ。Fortran の文法の問題か?代わりに-extend-source を入れると通った。しかしこんどは

Linking Type1.out ...

ld: multiple definitions of symbol _main

/opt/intel/fc/10.0.016/lib/for_main.o definition of _main in section (__TEXT,__text)

fname.o definition of _main in section (__TEXT,__text)

make: *** [Type1.out] Error 1

というのが出る。検索をかけてみたら

http://lists.apple.com/archives/fortran-dev/2007/Jul/msg00012.html

というのがあったので、-nofor-main というオプションをLDFLAGSにつけてやったら通った。完了。