我正在使用f2py从Fortran模块构建Python模块。Fortran模块包含无需在Python模块中提供的私有过程。下面是一个重现该问题的代码示例:
编译失败,出现以下错误信息:
似乎gfortran试图在模块之外使用私有函数,这当然会失败。
移除public/private语句可以解决问题(使所有函数都公开),但我觉得这不是一种干净的方法。这些函数并不一定用于Python中,并且不应该在Python环境中可用。如果无法修改包含此声明的Fortran脚本怎么办?
简而言之:
使用f2py管理Fortran中的私有过程的正确方法是什么?
module testmodule
implicit none
public :: &
test_sub
private :: &
useful_func
contains
subroutine test_sub()
!uses the function
print*, useful_func(3)
end subroutine test_sub
function useful_func(in) result(res)
integer, intent(in) :: in
integer :: res
!Does some calculation
res=in+1
end function useful_func
end module testmodule
当我使用以下编译命令:
f2py -c test.f90 -m test
编译失败,出现以下错误信息:
gfortran:f90: /tmp/tmpXzt_hf/src.linux-x86_64-2.7/test-f2pywrappers2.f90
/tmp/tmpXzt_hf/src.linux-x86_64-2.7/test-f2pywrappers2.f90:7:28:
use testmodule, only : useful_func
1
Error: Symbol « useful_func » referenced at (1) not found in module « testmodule »
似乎gfortran试图在模块之外使用私有函数,这当然会失败。
移除public/private语句可以解决问题(使所有函数都公开),但我觉得这不是一种干净的方法。这些函数并不一定用于Python中,并且不应该在Python环境中可用。如果无法修改包含此声明的Fortran脚本怎么办?
简而言之:
使用f2py管理Fortran中的私有过程的正确方法是什么?