[英]F2py with Openmp gives import error in Python
我能够在使用Openmp的Fortran中编译下面的最小工作示例,并运行以给出预期的结果(打印1)。
subroutine test
use omp_lib
write(*,*) omp_get_num_threads()
end subroutine
但是在f2py中在python中使用它会产生错误:
ImportError:DLL加载失败:动态链接库(DLL)初始化例程失败。
我已经使用依赖关系遍历程序测试了问题是否在于链接到openmp dll,但是,以下.dll在fortran可执行文件和从f2py编译的.pyd中都链接:
c:\\ tdm-gcc-64 \\ bin \\ LIBGOMP_64-1.DLL
因此,我对为什么python无法加载.dll感到困惑,因为它似乎是从f2py正确链接的。 我用来生成.pyd的f2py命令是
python -m numpy.f2py -c -m %output% %input%.f90 --fcompiler=gnu95 --compiler=mingw32 --f90flags="-fopenmp " -lgomp
任何帮助将不胜感激,谢谢。
编辑 :我已经用另一台具有相同安装设置的Windows PC对它进行了测试,并得到了相同的错误消息。 我想念什么吗?
编辑2 :显然,该程序实际上无法在f2py中工作,因此是一个不好的例子。 我很抱歉。 我实际上正在使用子例程,只要没有openmp命令,它们就可以正确地与f2py一起使用。
编辑3 :由于来自Pierre de Buyl的反馈,我已将示例代码替换为子例程而不是程序,尽管这对我的问题没有影响。
这对我有用:
tesf.f95
subroutine nthreads
!$ use omp_lib
integer :: nt
nt = 0
!$ nt = omp_get_max_threads()
write(*,*) 'Nthreads'
write(*,*) nt
end subroutine
编译:
f2py -c test.f95 -m test --f90flags='-fopenmp' -lgomp -lpthread --compiler=mingw32 --fcompiler=gfortran
如果我运行:
python -c "import test; test.nthreads()"
结果是:
Nthreads
8
看来问题出在使用tdm-gcc-64作为编译器,所以我改为使用可以按预期工作的mingw64安装。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.