MPI多节点运行wrf.exe提示libgfortran.so.3找不到问题求助
WRF跨节点运行共享库缺失及单节点段错误解决方案
问题根因
- 你当前执行的
locate命令仅查询了登录节点的文件列表,跨节点调用时的计算节点未安装对应版本的libgfortran.so.3,或是动态库搜索路径未包含该文件所在目录 - 单节点段错误大概率也和编译时链接的动态库版本与运行时加载的版本不匹配相关
分步排查及解决方法
第一步:确认计算节点库依赖情况
先执行以下命令查看所有目标计算节点的wrf.exe依赖情况,确认缺失库的分布:
mpiexec -np 4 -hostfile ~/hostfile ldd ./wrf.exe
第二步:无root权限下的修复方案,按优先级选择即可
- 临时指定动态库搜索路径
直接在mpiexec执行时注入环境变量,把登录节点的库路径同步到所有计算节点进程:
mpiexec -np 4 -hostfile ~/hostfile -env LD_LIBRARY_PATH /usr/lib/x86_64-linux-gnu/:$LD_LIBRARY_PATH ./wrf.exe
如果以上命令仍然报错,可以在自己的home目录下创建专属库目录,把libgfortran.so.3拷贝到该目录,再把该目录路径加到LD_LIBRARY_PATH即可:
mkdir ~/my_lib cp /usr/lib/x86_64-linux-gnu/libgfortran.so.3 ~/my_lib/ mpiexec -np 4 -hostfile ~/hostfile -env LD_LIBRARY_PATH ~/my_lib:$LD_LIBRARY_PATH ./wrf.exe
- 静态编译WRF彻底解决依赖问题
修改WRF编译生成的configure.wrf文件,找到LDFLAGS配置项,末尾添加以下参数:
-static-libgfortran -static-libgcc
重新编译WRF后生成的可执行文件会把gfortran相关的库静态打包,不再依赖系统的动态库,既可以解决跨节点库缺失问题,也能修复单节点运行时的段错误问题。
- 指定同版本系统节点运行
部分集群不同分区的节点操作系统版本不同,比如Ubuntu 16.04默认带libgfortran.so.3,Ubuntu 18.04及更高版本默认带libgfortran.so.4,你可以选择和编译WRF时所在节点同一系统版本的计算节点队列提交任务,即可避免版本不匹配问题。
单节点段错误补充排查
如果以上方案修复跨节点问题后单节点仍然报错,可以用gdb调试确认错误点:
gdb ./wrf.exe # 进入gdb交互界面后执行run,程序崩溃后执行bt即可查看调用栈定位错误原因
内容的提问来源于stack exchange,提问作者Aniket Tiwari
相关产品推荐
相关产品推荐

