问题描述
考虑以下Fortran模块:
input.f95
module input
integer,parameter :: identifier_max_length = 8
end module input
utils.f95
module utilities
use input,only: identifier_max_length
integer(kind=identifier_max_length) :: ix ! works !
character(len=identifier_max_length) :: output_dir ! DOES NOT work !
contains
subroutine test
character(len=identifier_max_length) :: output_dir ! works !
write(*,*) ix,output_dir
end subroutine
end module
要使用f2py进行编译,我首先将input.f95
编译为共享库:
gfortran -shared -O2 -o libinput.so -fPIC input.f95
,然后utils.f95
到python模块:
python -m numpy.f2py -c --fcompiler=gfortran -L. -I. -linput -m utils utils.f95
当具有该变量的整数定义起作用时,模块级变量output_dir
的字符长度定义将返回错误use of undeclared identifier 'identifier_max_length'
。奇怪的是,子例程级别的相同字符定义实际上可以正常工作。我钻入了numpy.f2py.capi_maps.py
代码,其中进行了类型映射和种类转换,并且看起来像字符类型的变量一样,字符长度的变量没有得到很好的照顾。
在同一utils模块中定义identifier_max_length
参数也可以解决此问题,但这不是我的代码库中的选项。
有人对此有解决方案吗?有没有一种方法可以通过.f2py_f2cmap
转换长度语句,还是可以让C代码知道input:identifier_max_length
变量?
欢呼
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)