使用OpenMP编译的f2py模块的Python导入错误

时间:2017-07-06 20:02:11

标签: python openmp f2py

我目前在包装一些Fortran子程序以便在python3脚本中使用时遇到问题。自从我尝试在子例程中使用OpenMP以来,这个问题才出现。

例如,如果我编译模块' test.pyd'使用f2py -c -m --fcompiler=gfortran --compiler=mingw32 --f90flags='-fopenmp' test test.f90 -lgomp,其中' test.f90'是一个包含并行循环的Fortran子例程,在尝试将此模块导入我的脚本时,遇到ImportError: DLL load failed: A dynamic link library (DLL) initialization routine failed.

在编译中删除-fopenmp标志,或Fortran子例程中的!$omp注释删除此错误。

将子程序更改为大致相当的Fortran程序,程序将编译为.exe并并行运行。

我在Windows 10平台上使用AMD64处理器,使用来自TDM-GCC的GNU Fortran和C编译器

1 个答案:

答案 0 :(得分:0)

我刚试过你的构建命令,它看起来完全没问题。我自己能够从你正在编写的python模块中运行并行子程序。

你是如何执行使用你的模块的python代码的?我认为问题是你的路径中没有openmp dll(名为libgomp-1.dll

我建议你运行(从bash shell):

where libgomp-1.dll

如果命令找不到它,那么你应该将你的openmp dll的路径(通常是“C:\ tools \ mingw64 \ bin \”)添加到你的路径中。

为此,您可以使用:

export PATH=$PATH:C:\tools\mingw64\bin\ && python script_using_module.py

您执行python代码的方式很可能无法正确计算路径,因为您可以毫无问题地运行并行可执行文件。