我正在使用f2py来包装一些Fortran子例程。从Python调用时,我总是使用显式数组作为输入/输出,但是有一些需要可分配的工作数组。这些数组与Python没有接口。复制问题的小型测试子程序如下所示:
subroutine test(n, x, y)
!f2py intent(in) n, x
!f2py intent(out) y
!f2py depend(n) x
integer, intent(in) :: n, x(n)
integer, intent(out) :: y
integer, allocatable :: z(:)
allocate(z(n))
z(:) = 10
y = z(2) + x(1)
end subroutine test
每当我使用内部可分配数组时,我在执行" python setup.py develop"时会得到以下输出。与NumPy的distutils包:
test.o : error LNK2019: unresolved external symbol _gfortran_runtime_error referenced in function test_
test.o : error LNK2019: unresolved external symbol _gfortran_runtime_error_at referenced in function test_
test.o : error LNK2019: unresolved external symbol _gfortran_os_error referenced in function test_
ASAP\lib\asap_lib.pyd : fatal error LNK1120: 3 unresolved externals
我正在使用numpy.distutils.misc_utl和gfortran 5.2.0,mingw64,Windows 10中的NumPy配置类。
如果我直接使用gfortran,程序将编译得很好,但当它与f2py(或该进程中的某个地方)连接时,事情就会失败。我可以注释掉分配行,它会编译,但显然不能在运行时工作。无论我有多少可分配的数组,总有3个未解析的外部。
虽然我在这里,但如果Fortran子例程中有写入或打印语句,我会收到类似的链接错误。我不需要它们,如果有人有想法,它只对调试有用。
感谢您的帮助。
更新1:
使用numpy.distutils.misc_util中的Configuration类我添加了一个额外的链接选项
config.add_extension('test_lib', sources, extra_link_args=['/FORCE']
查看信息here at Microsoft Linker Options后。 ' / FORCE'是关键选择。 print或write命令仍然在Python中抛出退出代码255,但至少可分配的数组似乎正在工作,这就是我所关心的。
看起来像是一个黑客,但如果有人知道是什么导致原始问题,我可能仍然有一个更深层次的根本问题,我需要解决。
答案 0 :(得分:1)
我遇到链接问题,并在f2py选项中指定compiler = mingw32修复了所有问题。