【发布时间】:2020-12-10 11:44:52
【问题描述】:
我正在尝试使用 f2py 将一组 Fortran 文件包装到 Python。我正在通过 mingw64 使用 gfortran 编译器。我试图包装的源代码包含 Lapack 函数,因此我按照此网页上的“Easy windows build”说明构建了 Lapack 和 Blas:https://icl.cs.utk.edu/lapack-for-windows/lapack/#build。我现在可以通过运行来编译我的源文件
gfortran foo.F90 -ffree-line-length-512 -llapack -lblas -fdec-math -Wl,-allow-multiple-definition
如您所见,我需要传递一组选项,除了最后一个 -Wl,-allow-multiple-definition 之外,这些选项在这里并不完全相关。我发现如果我不包含此选项,则文件将无法编译,并且我会收到一整套以multiple definition of `_gfortran[...] 结尾的错误,其中[...] 包含一些额外的字符串,例如_st_open'。也许最后一个选项有点 hack,但至少文件编译没有问题。
但是我不知道如何将此链接器选项传递给 f2py。目前我在跑步,
python -m numpy.f2py -llapack -lblas -c foo.F90
--fcompiler=gnu95 --compiler=mingw32 --f90flags="-ffree-line-length-512 -fdec-math -Wl,-allow-multiple-definition" -m foo_py
但这似乎没有做任何事情,我只是得到相同的多重定义错误,就好像没有包含链接器标志一样。那么我应该使用什么语法呢?
谢谢!
编辑:经过一些广泛的谷歌搜索,f2py 似乎不包含将链接器标志传递给编译器的选项。所以现在我想知道是否有某种方法可以在全局范围内强制编译器上的allow-multiple-definition 选项。
我认为错误本身一定源于我构建 LAPACK 和 BLAS 的方式。之前报告过类似的错误,请参阅https://icl.cs.utk.edu/lapack-forum/viewtopic.php?f=4&t=5315,但似乎只在构建过程中而不是在 fortran 编译期间。是否有其他方法来构建 LAPACK,以便我可以轻松地将其与 gfortran 合并?
【问题讨论】:
标签: python fortran lapack f2py