Я новичок в этом, но мне нужно получить доступ к некоторым старым функциям Fortran 77 с C. Я не хочу изменять код Fortran, если это возможно, я действительно предпочел бы написать обертку для вызова функций Fortran из C. Я надеюсь получить минимальный рабочий пример (на Linux). Что я сделал:
В файле somefunction.f:
REAL*8 FUNCTION MYFUNC(ZZ)
IMPLICIT NONE
REAL*8 ZZ, T1
T1 = ZZ + 1.0D0
MYFUNC = T1
RETURN
END
скомпилировано с gfortran -c somefunction.f -o somefunction.o
.
В файле отладки. c:
#include <stdio.h>
double cfunc(double x) {
double result = myfunc_( &x );
return result;
}
int main() {
double test = cfunc(3.0);
printf(" %.15f ",test);
}
скомпилировано с gcc -c debug.c -o debug.o
.
Затем я даю gcc debug.o somefunction.o
и ./a.out
.
Однако вместо 3 + 1 = 4 я получаю бессмысленные числа. Как я могу исправить это?
PS: Если это решено, реальные функции у меня немного сложнее:
Что я должен изменить, если MYFUN C должен был быть вместо типа COMPLEX*16 FUNCTION MYFUNC(ZZ)
с ZZ также комплексным?
Что, если MYFUN C вызвал некоторую встроенную функцию на Фортране, скажем, CDLOG (ZZ )?
А что, если он обращается к общему блоку? Это тоже можно разместить?