プログラミング

FORTRANとC言語との連携

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