【发布时间】: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