Построить и связать Фортран DLL с кодом Фортрана с Gfortran в Cygwin - PullRequest
0 голосов
/ 16 апреля 2020

Я построил Фортран DLL и теперь пытаюсь использовать его на Фортране. Проблема в том, что я не могу правильно связать главное с dll.

Я на WIndows10 и использую gfortran от cygwin (32-битная версия cygwin, gfortran поставляется из пакета i686-w64-mingw32) .

Вот dll: $ more helloworld.f90

function hello()
integer hello
hello=1
return
end

Я компилирую и генерирую dll следующим образом:

gfortran -fno-underscoring  -c helloworld.f90
gfortran -shared -o helloworld.dll  helloworld.o

Вот основные $ more usehello.f90

program usehello
integer, external :: hello
integer :: i
i=1
write(*,*) hello(i)
stop
end

компиляция в порядке:

i686-w64-mingw32-gfortran.exe -c  -fno-underscoring  usehello.f90

ссылка не удалась:

i686-w64-mingw32-gfortran.exe  usehello.o helloworld.dll -o usehello
error while loading shared libraries: libgfortran-5.dll: cannot open shared object file: No such file or directory

Тем не менее, у меня есть этот файл:

$ ls -l  /usr/i686-w64-mingw32/sys-root/mingw/bin/libgfortran-5.dll
-rwxr-xr-x 1 UT013536+l-pg164999 UT013536+Aucun 2460672  4 mars  04:46 /usr/i686-w64-mingw32/sys-root/mingw/bin/libgfortran-5.dll

Я пытался добавить --stati c -libgfortran (я не был убежден в использовании чего-то 'stati c' для DLL, но так ...): Это, по-видимому, правильно, но исполняемый файл fails:

$ i686-w64-mingw32-gfortran.exe  usehello.o helloworld.dll -static-libgfortran -o usehello
$ ./usehello
usehello.exe: error while loading shared libraries: libquadmath-0.dll: cannot open shared object file: No such file or directory

Звучит так, как если бы переменная окружения отсутствовала, но я не могу найти никаких сообщений о таких сбоях. Спасибо, если кто-то может помочь ...

1 Ответ

0 голосов
/ 16 апреля 2020

На самом деле, идея использовать команду i686-w64-mingw32-gfortran.exe не годится ... если мы просто используем gfortran, она отлично работает ...

...