FORTRANとCとの連携は少々クセがあります。FORTRANからはポインタが渡されます。また,関数名はFORTRANで定義した関数名に”_”(アンダースコア)を付加したものとなります。私はFORTRAN77の知識しかないため,古い書式です。
#!/bin/bash
gcc -fPIC --shared -xc -o libadd.so - << EOS
#include <stdio.h>
int add_(int* x, int* y, int* z)
{
printf("[C] %d + %d = %d\n", *x, *y, *x + *y);
*z = *x + *y;
return 0;
}
EOS
cat << EOF > fortran01.f
PROGRAM fortran01
IMPLICIT NONE
INTEGER A,B,Z
A = 10
B = 20
WRITE(*,*) 'START'
CALL add(A, B, Z)
WRITE(*,100) A, B, Z
WRITE(*,*) 'END'
100 FORMAT('[FORTRAN]', I5, ' + ', I5, ' = ', I5)
STOP
END
EOF
gfortran -o fortran01 fortran01.f libadd.so
./fortran01
