Я хочу иметь возможность вызывать сетевые функции в моем приложении на Фортране. Мой босс хочет, чтобы я все делал на Фортране, а не на Си и Фортране. Мы уже сделали версию приложения с использованием компилятора PGI Fortran для Windows. Мы переносим его на Linux, где, вероятно, будем использовать их компилятор. Сейчас я использую gfortran.
Я создал интерфейс для этих сетевых вызовов, и все компилируется и связывается. Код ниже чем-то похож на то, что я делаю, за исключением того, что интерфейсы и константы находятся в модуле.
PROGRAM MAIN
INTEGER,PARAMETER ::AF_INET = 2
INTEGER,PARAMETER ::SOCK_STREAM = 1
INTEGER,PARAMETER ::IPPROTO_TCP = 6
INTERFACE
FUNCTION socket(domain,type,protocol)
INTEGER ::socket,domain,type,protocol
END FUNCTION
END INTERFACE
sock = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)
WRTIE(*,*)"Socket returned: ",sock
END PROGRAM
Когда я запускаю программу, функция сокета не возвращается -1. Я действительно не знаю, что происходит. Я не добавляю никаких библиотек в командную строку, поэтому я предполагаю, что она правильно связывается с библиотеками по умолчанию. Я компилирую, используя
gfortran -o MAIN_PROGRAM MAIN_PROGRAM.f90 -fno-underscoring