带有OMP的f2py:无法导入模块,未定义的符号GOMP_*

Mar*_*ark 6 python fortran numpy openmp f2py

我希望使用openmp来加速我通过f2py运行的Fortran代码.但是,在成功编译之后,我无法在Python中导入模块.

对于像这样的Fortran95模块:

module test
implicit none
contains
subroutine readygo()
real(kind = 8), dimension(10000) :: q
!$OMP WORKSHARE
q = 7
!$OMP END WORKSHARE
end subroutine
end module
Run Code Online (Sandbox Code Playgroud)

使用以下命令编译和导入:

f2py -m SOmod --fcompiler=gnu95 --f90flags='-march=native -O3 -fopenmp' -c SOtest.f95
python2 -c "import SOmod"
Run Code Online (Sandbox Code Playgroud)

我收到一个错误.错误是导入 - 编译直接使用f2py或gfortran工作正常(仅获得有关'使用已弃用的NumPy API'的警告).

Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: ./SOmod.so: undefined symbol: GOMP_barrier
Run Code Online (Sandbox Code Playgroud)

我为不同的OMP指令得到了不同的GOMP_*错误.没有指令(但使用-openmp标志)它可以工作.

任何帮助将不胜感激.

War*_*ser 5

我能够在Mac OS X(10.9.5)上重现错误,gfortran使用自制软件安装,我能够通过添加来修复它-lgomp命令:

f2py -m SOmod --fcompiler=gnu95 --f90flags='-march=native -O3 -fopenmp' -lgomp -c SOtest.f95
Run Code Online (Sandbox Code Playgroud)

由@Mark添加:注意这-lgomp是f2py的参数,而不是gfortran.虽然只有编译-gomp,都-gomp和-fopenmp需要为它是平行的,如所描述这里.GOMP是GNU openMP实现.