Fortran サブルーチンを使う


C++から,FORTRANのサブルーチンを呼べると便利なことも多い. というわけで,C++からFORTRANのサブルーチンを呼ぶ方法を記しておく.
  1. C++ のプログラムから,FORTRAN のサブルーチンを呼ぶためには, まず,FORTRAN のサブルーチン名を小文字にして最後に"_"をつけたものを, C++から呼ぶときの関数名とする.
    つまり,
          SUBROUTINE SUB(X,Y)
          REAL*8 X,Y
    
            (云々)
          RETURN
          END
    
    というような FORTRAN の subroutine があったとき,これを C++ から 呼ぶときには,
    sub_( x, y )
    
    となる.
  2. Prototype宣言はこうする.
      extern "C" void sub_( double &x, double &y );
    
    (引数が参照で渡されることに注意.これは,ここ で述べているように,Fortranのサブルーチンへの引数の受け渡しに参照を 使うかららしい.)
  3. 最後に,コンパイル時(実行形式を作る時)は,FORTRAN関数のライブラリをリンクする必要がある.icpc/ifort (Intel compiler) の場合は,"libifcore.a", "libpthread.a" というライブラリをリンクすればよいようである.
     %  icpc main.cc -c
     %  ifort sub.f -c
     %  icpc main.o sub.o -lm -lifcore -lpthread
    
    g++/g77 の場合,以前は"libf2c.a" というライブラリをリンクしていた.
     %  g++ main.cc -c
     %  f77 sub.f -c
     %  g++ main.o sub.o -lm -lf2c
    
    最近どうなっているのかはよく知らない.

(2001年9月3日作成,2004年9月20日改訂)




戻る