4.1 g77 と gcc のコンビネーション

UNIX 環境では、 伝統的に Fortran プログラムと C プログラムが 相互にリンク可能なようになっている (非常に便利である)。 これは Fortran コンパイラー f77 と C コンパイラー cc の作る オブジェクト・コードと使用する実行時ライブラリィに互換性があるためである。

GCC (GNU compiler collection) でも、 この伝統が維持されていて、 g77 (GNU 版 f77) と gcc (GNU 版 cc) を利用することで、 C プログラムから Fortran プログラム、 例えば LAPACK のサブルーチン呼び出しが実現できる。

後で紹介するプログラム testlapack3.c では、 以下のようにコンパイル・リンクする。
oyabun% gcc -c -O -I/usr/local/include testlapack3.c
oyabun% g77 -o testlapack3 testlapack3.o -L/usr/local/lib -llapack -lblas -lmatrix

LAPACK のライブラリィ・ファイル liblapack.a と、 下請けの BLAS のライブラリィ・ファイル libblas.a と、 お手製の matrix ライブラリィのライブラリィ・ファイル libmatrix.a/usr/local/lib というディレクトリィにあるため、

-L/usr/local/lib -llapack -lblas -lmatrix
というリンカー・オプションを指定している。

C プログラムのコンパイルには gcc を使っているが、 リンクには g77 を使っているところが小さな工夫である (Fortran プログラムは、標準の C ライブラリィ以外のライブラリィを 必要とするため、gcc をオプションなしで使ったのでは必要なライブラリィが リンクされない。リンクを g77 に任せることでこの問題を気軽に 回避できる)。 もっともお手軽には
oyabun% g77 -O -I/usr/local/include -o testlapack3 testlapack3.c -L/usr/local/lib -llapack
 -lblas -lmatrix
とすべてを g77 に任せることも可能である。

桂田 祐史
2017-10-07