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

2024-04-29 15:53:13 发布

您现在位置:Python中文网/ 问答频道 /正文

在包装一些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编译器


Tags: 模块test程序脚本例程python3pyddll
1条回答
网友
1楼 · 发布于 2024-04-29 15:53:13

我刚试过你的构建命令,看起来很不错。我自己能够从一个python模块运行一个并行子例程,这个模块正是按照您现在的方式编译的。在

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

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

where libgomp-1.dll

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

为此,您可以使用:

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

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

相关问题 更多 >