繁体   English   中英

如何将 linker 标志传递给 f2py?

[英]How to pass linker flags to f2py?

我正在尝试使用 f2py 将一组 Fortran 文件包装到 Python 中。 我正在通过 mingw64 使用 gfortran 编译器。 我要包装的源代码包含 Lapack 函数,因此我按照此网页上的“Easy windows 构建”说明构建了 Lapack 和 Blas: https://icl.cs.utk.edu/lapack-for-windows/lapack/#建立. 我现在可以通过运行来编译我的源文件

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' 也许最后一个选项有点小技巧,但至少文件编译没有问题。

但是我不知道如何将这个 linker 选项传递给 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

但这似乎没有任何作用,我只是得到相同的多重定义错误,就好像没有包含 linker 标志一样。 那么我应该使用什么语法呢?

谢谢!

编辑:经过一些广泛的谷歌搜索,f2py 似乎没有将 linker 标志传递给编译器的选项。 所以现在我想知道是否有某种方法可以在全局范围内强制编译器上的allow-multiple-definition选项。

我认为错误本身必须以某种方式起源于我构建 LAPACK 和 BLAS 的方式。 Similar errors have been reported before, see https://icl.cs.utk.edu/lapack-forum/viewtopic.php?f=4&t=5315 , but seemingly only in the built process and not during a fortran compile. 是否有其他方法来构建 LAPACK,以便我可以轻松地将其与 gfortran 合并?

你看过这个: how to tell f2py module to look in current directory for shared object dependency

建议如下:

  1. 设置环境变量export LDFLAGS=-Wl,-rpath=.
  2. 设置环境变量export NPY_DISTUTILS_APPEND_FLAGS=1
  3. 将 numpy 升级到 1.16.0 或更高版本

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM