我可以在带有子例程调用的子例程上使用F2PY吗?

Rya*_*and 4 python fortran nested subroutine f2py

使用F2PY作为包装器,是否可以将子例程与子例程调用一起使用?如果是这样,怎么办?

如果我不清楚,我的意思是这样的:

    SUBROUTINE average(a, b, out)

    real a, b, out
cf2py intent(in) a, b
cf2py intent(out) out

    call add(a, b, out)

    out=out/2

    END
Run Code Online (Sandbox Code Playgroud)

add子例程如下:

  subroutine add(a, b, out)

  real a, b, out

  out = a + b

  return
  end
Run Code Online (Sandbox Code Playgroud)

尝试f2py -c -m average average.f并导入到python我得到:

ImportError:./average.so:未定义的符号:add_

另外,将意图添加到第二个子例程中也无法解决该问题。

cas*_*sey 5

您需要add在编译命令中包含包含的文件,例如

f2py -c -m average average.f add.f
Run Code Online (Sandbox Code Playgroud)

导入的共享库需要在导入时解析其引用,这意味着它们必须包含在库中或链接到该库。您可以像下面这样将功能保存在单独的库中:

gfortran -shared -fPIC -o add.so add.f
f2py -c -m average average.f add.so
Run Code Online (Sandbox Code Playgroud)

它将产生一个本身不包含add但将add.so对该函数具有运行时链接依赖关系的python模块。