通常 cc で作成されるプログラムと、f77 で作成されるプログラムでは、使 用するライブラリィに相違がある。
大抵は f77 で使用するライブラリィの方が多い。 そこで f77 でコンパイルすると、うまく行くことが多い。
cc あるいは gcc を使ってコンパイル&リンクする場合には、 リンクするライブラリィをこちらで指定してやる必要がある (何もしないと、libc.a をリンクするだけのコンパイラーが多い)。 どういうライブラリィが必要か、cc の場合はなかなか分かりにくい。
FreeBSD 標準の f77 は f2c という Fortran → C トランスレーターが元に なっているもので、この場合 Fortran 用のライブラリィは libf2c.a という 名前になっている。 だから、 cc (gcc) に -lf2c というオプションを渡せば良いはず (なお、 数値計算をするので -lm はほとんどの場合に必須である)。
なお、g77 (GNU Fortran 77 compiler) は、 現時点ではライブラリィ関係は f2c を元にしていて、 やはり libf2c.a をリンクしているらしい。
cc と f77 |
oyabun% cc -c test1main.c
oyabun% f77 -c test1sub.f oyabun% f77 -o prog test1main.o test1sub.o |
gcc と g77 (1) |
oyabun% gcc -c test1main.c
oyabun% g77 -c test1sub.f oyabun% g77 -o prog test1main.o test1sub.o |
gcc と g77 (2) |
oyabun% gcc -c test1main.c
oyabun% g77 -c test1sub.f oyabun% gcc -o prog test1main.o test1sub.o -lf2c |