我在包装一些Fortran子程序以用于python3脚本时遇到了一个问题。自从我试图在子例程中使用OpenMP后,此问题才出现。用OpenMP编译的f2py模块的Python导入错误
例如,如果我使用f2py -c -m --fcompiler=gfortran --compiler=mingw32 --f90flags='-fopenmp' test test.f90 -lgomp
编译模块'test.pyd',其中'test.f90'是包含并行循环的Fortran子例程,试图将此模块导入到我的脚本中时,遇到ImportError: DLL load failed: A dynamic link library (DLL) initialization routine failed.
。
删除编译中的-fopenmp
标志或Fortran子例程中的!$omp
注释删除此错误。
将子例程更改为大致等效的Fortran程序,该程序编译为.exe并且并行运行正确。
我是Windows 10平台上,与AMD64处理器,采用GNU Fortran和C编译器从TDM-GCC
谢谢您的回复!我在我的PATH中包含了'C:\ TDM-GCC-64 \ bin',其中包括C和Fortran编译器以及'libgomp-1.dll'。 最初我从iPython控制台(使用Anaconda3)运行脚本,但是为了简化问题,我只是尝试打开一个Python3控制台,并输入'import test',达到相同的效果(将.pyd文件添加到当然是正确的目录) –
如果你在你的脚本所在的目录中打开一个常规的'cmd'控制台,然后运行'python your_script.py'?它会产生相同的错误吗? (不是用anaconda python控制台)。水蟒可能会混淆你的PATH。 – Thundzz
不幸的是,我在Python 3.6.0中遇到了同样的错误。我已经从系统PATH中删除了Anaconda3,并且在编译时没有OpenMP标志,模块成功导入,并且当我重新引入该标志时,出现原始错误。 我刚才已经进入一个'cmd'控制台,将两个.pyd文件输入我Python36文件夹后: '进口numpy' '进口omp_test_mod' 最后一行后,将出现错误 '进口test_mod'像之前一样。键入'libgomp-1.dll'表明它确实在PATH中。 –