Создание библиотеки Фортрана для ctypes.CDLL - PullRequest
0 голосов
/ 12 февраля 2020

У меня нет опыта создания библиотек в Windows, и я думаю, что у меня проблема, связанная только с тем, как правильно скомпилировать код на Фортране.

Цель : I Я хочу использовать написанный на Фортране «инструмент» в Python, т.е. я хочу иметь Python интерфейсов для подпрограмм в инструменте. Инструмент использует две разные библиотеки, LAPACK и SPICE (https://naif.jpl.nasa.gov/naif/toolkit_FORTRAN.html).

Готово к настоящему моменту : я могу успешно создать общую библиотеку инструмента в Linux и использовать ее из Python с ctypes.CDLL. Теперь я хочу сделать то же самое в Windows. Я скомпилировал SPICE (https://naif.jpl.nasa.gov/naif/toolkit_FORTRAN_PC_Windows_IFORT_64bit.html) как общую библиотеку с Inter Fortran Compiler. Для этого я использовал командный файл:

SET PRODUCT=spicelib
SET F77=ifort
SET TKF77OPS=/fpscomp:all /assume:byterecl /nodebug /check:bounds /dll

DIR /B *.for >> objects.lst
%F77% %TKF77OPS% -o lib%PRODUCT%.dll @objects.lst

Я получил файлы libspice.dll и libspice.lib.

Затем я выполнил шаги, описанные здесь https://icl.cs.utk.edu/lapack-for-windows/lapack/#build, чтобы получить liblapack.dll и liblapack.lib.

Наконец, я использовал ifort для компиляции моего инструмента в DLL:

ifort /dll -o libtool.dll tool.f libspice.lib libblas.lib liblapack.lib

Это компилируется с двумя предупреждениями:

LINK: warning LNK4098: defaultlib 'LIBCMT' conflicts with the use of other libs; use /NODEFAULTLIB:library
LINK: warning LNK4098: defaultlib 'MSVCRTD' conflicts with the use of other libs; use /NODEFAULTLIB:library

В Python Затем я использую:

tool_lib = CDLL('libtool.dll')
tool_lib.load_tool_(path)

и получаю:

AttributeError: function 'load_tool_' not found

Инструмент загрузки функций выглядит следующим образом:

      SUBROUTINE load_tool(path)

      IMPLICIT NONE
      CHARACTER(len=*) path

      call furnsh(path)
      END

(furnsh является обычной процедурой из SPICE инструментарий и в основном загружает файл.)

Я экспериментировал с подчеркиванием в Python, но это не помогает. Я на самом деле не уверен, были ли подпрограммы правильно связаны с DLL. Запуск

dumpbin.exe /EXPORTS libtool.dll
Microsoft (R) COFF/PE Dumper Version 14.24.28316.0
Copyright (C) Microsoft Corporation.  All rights reserved.


Dump of file libtool.dll

File Type: DLL

  Summary

     5723000 .data
        7000 .pdata
       77000 .rdata
        1000 .reloc
      22C000 .text
        2000 _RDATA

, который мне мало помогает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...