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:はてな支店