MinGW gcc と g95 を使って c から fortran のサブルーチンを呼び出す
やってみたらできたのでメモをしておく。c のソースコード main.c は
int main (void) { int i=3; hello_(&i); }
これから呼び出している hello_() の fortran ソースコード hello.f は
SUBROUTINE HELLO (i) PRINT * ,'HELLO' ,i END
でコンパイルのコマンドは
g95 hello.f -shared -mrtd -o hello.dll gcc main.c hello.dll
で、実行ファイル a.exe が出来上がった。
fortran から c の void 型関数(fortran の SUBROUTINE 相当)を呼び出す。(2010.7.14)
エントリポイントの fortran コード main.f は
i=-999 CALL hello(i) END
これから呼び出している hello() の c のコード hello.c は
#include <stdio.h> void hello_ ( int * i ) { printf( "hello %d", *i ); }
でコンパイルのコマンドは
gcc hello.c -shared -mrtd -o hello.dll g95 main.f hello.dll
で、実行ファイル a.exe が出来上がった。
Cのソースの方にアンダースコアが必要な理由は理解していない。
参考にしたページ:dllの作り方 - MEMO:はてな支店