C++から,FORTRANのサブルーチンを呼べると便利なことも多い.
というわけで,C++からFORTRANのサブルーチンを呼ぶ方法を記しておく.
- C++ のプログラムから,FORTRAN のサブルーチンを呼ぶためには,
まず,FORTRAN のサブルーチン名を小文字にして最後に"_"をつけたものを,
C++から呼ぶときの関数名とする.
つまり,
SUBROUTINE SUB(X,Y)
REAL*8 X,Y
(云々)
RETURN
END
というような FORTRAN の subroutine があったとき,これを C++ から
呼ぶときには,
sub_( x, y )
となる.
- Prototype宣言はこうする.
extern "C" void sub_( double &x, double &y );
(引数が参照で渡されることに注意.これは,ここ
で述べているように,Fortranのサブルーチンへの引数の受け渡しに参照を
使うかららしい.)
- 最後に,コンパイル時(実行形式を作る時)は,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日改訂)
|