【问题标题】:Calling Fortran from Python using CFFI [duplicate]使用 CFFI 从 Python 调用 Fortran [重复]
【发布时间】:2022-01-12 22:29:12
【问题描述】:

我正在尝试在 Windows 上重现 this example。下面是对应的fortran代码

fortran_wrapper.f90

MODULE FORTRAN_WRAPPER

USE ISO_C_BINDING, ONLY: C_INT
USE YOUR_FORTRAN_MODULE

IMPLICIT NONE

CONTAINS
  SUBROUTINE C_WRAPPER_YOUR_SUBR(ARG1) BIND(C, NAME = "C_WRAPPER_YOUR_SUBR")

     INTEGER(C_INT), INTENT(IN), VALUE :: ARG1  

     CALL YOUR_SUBR(ARG1)

  END SUBROUTINE C_WRAPPER_YOUR_SUBR

END MODULE FORTRAN_WRAPPER

fortran_code.f90

 MODULE YOUR_FORTRAN_MODULE

  CONTAINS
  
    SUBROUTINE YOUR_SUBR(ARG1)

     IMPLICIT NONE

     INTEGER, INTENT(IN) :: ARG1

     WRITE(*,*) 'The values is: ', ARG1

   END SUBROUTINE YOUR_SUBR

 END MODULE YOUR_FORTRAN_MODULE

这里是对应的调用python代码

python_prog.py

from cffi import FFI
import os
ffi = FFI()
dll_path = os.path.join(os.path.dirname(__file__), 'dll_name.dll')
lib = ffi.dlopen(dll_path)

ffi.cdef("void C_WRAPPER_YOUR_SUBR(int arg1);")

arg1 = 1

lib.C_WRAPPER_YOUR_SUBR(arg1)

dll_name.dll 是使用 intel fortran 编译器按以下方式创建的

ifort /dll fortran_code.f90 fortran_wrapper.f90 /exe:dll_name.dll

运行python python_prog.py后出现以下错误

AttributeError: function/symbol 'C_WRAPPER_YOUR_SUBR' not found in library 'dll_name.dll': error 0x7f

我将不胜感激。

【问题讨论】:

  • 我不懂Fortran工具,但可能问题和groups.google.com/g/python-cffi/c/djQHpdoz1bo/m/LWKKLARRDQAJ一样?
  • @ArminRigo 您的回答/链接帮助很大。谢谢你。它现在正在工作。我刚刚将!DEC$ ATTRIBUTES DLLEXPORT :: C_WRAPPER_YOUR_SUBR 添加到fortran_wrapper.f90 并再次创建了dll。现在,调用python代码后没有错误了。

标签: python windows dll fortran python-cffi


【解决方案1】:

(在此处复制此外部论坛的答案)在 Windows 上,您需要从 动态链接库。换句话说,而在 POSIX 系统上,所有的都是非静态的 函数由共享库导出(默认情况下),它不会 在 Windows 上像这样工作。在 C 中,您需要使用 .def 文件,或者在 C 源代码中说:

__declspec(dllexport) int myfunction(int a) {
   ...
}

(同时在此处复制您的评论)Fortran 等效项似乎是将其添加到您的 .f90 文件中:

!DEC$ ATTRIBUTES DLLEXPORT :: C_WRAPPER_YOUR_SUBR

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-04
    • 2021-03-22
    • 2017-04-19
    • 1970-01-01
    • 2020-03-26
    • 2016-03-25
    • 1970-01-01
    • 2014-12-31
    相关资源
    最近更新 更多