Cython,C和Fortran

nun*_*nco 4 c python fortran cython

我想请教您通过C函数调用fortran函数的帮助.这些C函数将通过cython在python代码中使用.把事情放在一起,我有这个计划:

Cython模块 - > C函数 - > Fortran,其中 - >表示"调用".

目前我设法从cython调用C函数,但我很难调用fortran函数.你能帮助我吗?(一个简单的例子会很棒).

提前致谢.编辑:我正在使用gcc 4.1.2.还有gfortran

M. *_* B. 7

第一个答案中的链接描述了过时的方法.通过添加ISO C绑定到Fortran,从C或Fortran中调用Fortran变得容易得多.使用此Fortran语言功能指示Fortran编译器发出与C二进制兼容的可执行代码.程序员不必"破解"连接,因为它是语言的一部分,它与编译器和平台无关.从技术上讲,ISO C绑定是Fortran 2003的一部分,但它已经在许多编译器中使用了好几年,例如,自4.3版本和英特尔ifort以来的gfortran.

要从C调用Fortran子例程或函数,可以使用绑定C选项声明Fortran子例程或函数,并使用绑定中提供的C兼容类型来声明参数.在"混合语言编程"下的gfortran手册中有一些例子.由于ISO C Binding是语言的一部分,因此本手册的这一部分主要与编译器无关.此处有关Stack Overflow和Web上其他地方的答案中还有其他示例.

这是一个从C调用的子程序的Fortran子程序声明的快速代码片段(未经测试):

subroutine test ( varint1, varflt2 )  bind ( C, name="MyTest" )

   use iso_c_binding

   integer (kind=c_int32_t), intent (in) :: varint1
   real (kind=c_float), intent (out) :: varflt2
Run Code Online (Sandbox Code Playgroud)

绑定C名称"MyTest"会覆盖Fortran名称 - 与Fortran不同,它区分大小写.无需担心下划线!变量类型应该是显而易见的......有关可用的内容,请参阅gfortran手册或其他地方.