在包装一些Fortran子例程以便在python3脚本中使用时,我遇到了一个问题。这个问题是在我试图在子程序中使用OpenMP之后才出现的。在
例如,如果我编译一个模块'测试.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,并以并行方式正确运行。在
我在Windows10平台上,使用AMD64处理器,使用GNU Fortran和TDM-GCC的C编译器
我刚试过你的构建命令,看起来很不错。我自己能够从一个python模块运行一个并行子例程,这个模块正是按照您现在的方式编译的。在
如何执行使用模块的python代码?我认为问题是您的路径中没有openmpdll(名为
libgomp-1.dll
)我建议您(从bash shell)运行:
where libgomp-1.dll
如果命令找不到它,那么您可能应该将openmpdll的路径(通常是“C:\tools\mingw64\bin\”)添加到您的路径中。在
为此,您可以使用:
执行python代码的方式很可能无法正确解释路径,因为可以毫无问题地运行并行可执行文件。在
相关问题 更多 >
编程相关推荐