这是我的第一个问题,所以对我好一点。
我正在使用 numpy 1.6.1 中的 f2py。我有一个包含几个子例程的 fortran 模块,这些子例程可以很好地编译(和工作)。但是,其中之一使用 erf(x) 函数,它是 GNU 扩展。对于我的目的来说它不够准确,所以我正在尝试使用外部 erf 实现。
我正在尝试使用 fortran 77 中的 Numerical Recipes 中的一个 - 我已将所有相关函数复制到一个名为“erf.f”的文件中,该文件与我的模块位于同一文件夹中。我include 'erf.f'
在模块文件的顶部使用。我将 erf 函数的实际名称更改为“derf”,因此它不会与 gfortran erf 扩展名发生冲突。
但是,当我尝试通过 f2py 编译时,foo
'erf.f' 中的每个函数都会出现错误
错误:“foo”的重新定义错误:“foo”的先前定义在这里
当我查看提到包含重新定义和先前定义的 c 文件时,似乎该函数确实存在两次。我只是不知道为什么?
有人知道如何解决这个问题吗?干杯。
编辑:我没有提到(因为我认为这是不必要的额外信息)numpy distutils 正在使用 f2py 来创建扩展。我现在提到它的原因是我发现我可以使用 很好地创建扩展f2py -c my_module.f90 -m mod
,但是在运行时python setup.py install
我得到了上面详述的错误。那么 f2py 在通过 distutils 运行时有什么不同呢?
编辑#2:如果我将外部 erf 函数文件的所有内容放入与我的模块相同的文件中,那么一切正常。我真的不想这样做,因为展望未来,我将拥有一个巨大的文件,但它现在可以工作,直到我得到这个问题的答案。