【WRF安装】WRF编译错误总结1:HDF5库包安装

目录

  • 1 HDF5库包安装有误:
    • HDF5 not set in environment. Will configure WRF for use without.
    • HDF5的重新编译
  • 错误原因1:提示 overflow 错误
    • 1. 检查系统是否缺少依赖库或工具
    • 2. 检查和更新编译器版本
    • 3. 检查 ./configure 报错信息
    • 4. 检查系统环境变量
    • 5. 逐步定位问题
    • 6. 重新下载 HDF5 源码并清理环境
    • 7. 检查编译器是否支持 64 位整数
  • 参考

1 HDF5库包安装有误:

在编译安装WRF时,执行./configure时,

./configure

弹出以下内容:

checking for perl5... no
checking for perl... found /usr/bin/perl (perl)
Will use NETCDF in dir: /home/wanzhou/soft/netcdf4.7
HDF5 not set in environment. Will configure WRF for use without.
Will use PHDF5 in dir: /home/wanzhou/soft/hdf5-1.8.20
Will use 'time' to report timing information
$JASPERLIB or $JASPERINC not found in environment, configuring to build without                       grib2 I/O...
------------------------------------------------------------------------

显示HDF5不在环境中。

HDF5 not set in environment. Will configure WRF for use without.

问题:
WRF 编译时需要 HDF5 库(特别是支持并行 I/O 的 PHDF5 库)。虽然检测到了 PHDF5 的路径 /home/wanzhou/soft/hdf5-1.8.20,但普通的 HDF5 没有设置。
这可能是因为环境变量 HDF5 或相关路径(如 HDF5_LIB 和 HDF5_INC)没有正确设置。

解决方法:
在 Shell 环境中设置 HDF5 的路径,并重新运行 ./configure:

export HDF5=/home/wanzhou/soft/hdf5-1.8.20
export HDF5_LIB=$HDF5/lib
export HDF5_INC=$HDF5/include

如果你已经安装了其他版本的 HDF5,确保路径正确。

HDF5的重新编译

重新编译 HDF5 的目的是确保它与 WRF 所使用的编译器和环境完全兼容,尤其是在并行计算(MPI)的情况下。如果你的 HDF5 安装存在问题(如未启用并行支持或编译器不一致),可以按照以下步骤重新编译 HDF5。

1、删除旧的 HDF5 编译目录(如果需要)

如果你之前已经安装了 HDF5,但路径或选项配置有误,可以选择删除旧的安装目录。

检查 HDF5 是否已安装
要查看HDF5是否安装以及其安装情况,可以使用以下命令:

h5cc --show

如果HDF5安装正确,这个命令应该会显示编译器和链接器的选项(如 gcc -I/home/path/include …),这些选项是用于编译和链接HDF5程序的。

删除旧的 HDF5
如果需要删除旧版本的 HDF5,直接删除安装目录:

rm -rf /home/wanzhou/soft/hdf5-1.8.20

在删除之前,确认该路径是否为旧版本 HDF5 的安装路径。

2、下载 HDF5 源代码
去 HDF5 官方网站下载对应的版本(确保版本与 WRF 支持的版本兼容)

HDF5 官方网站:The HDF Group

下载后解压:

wget https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.8/hdf5-1.8.20/src/hdf5-1.8.20.tar.gz
tar -xzvf hdf5-1.8.20.tar.gz
cd hdf5-1.8.20
cd /home/wanzhou/soft/hdf5-1.8.20/
CC=mpicc FC=mpif90 CFLAGS="-O2" FCFLAGS="-O2" ./configure --prefix=/home/wanzhou/soft/hdf5-1.8.20 \--enable-parallel \--enable-fortranwget https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.8/hdf5-1.8.22/src/hdf5-1.8.22.tar.gz
tar -xvf hdf5-1.8.22.tar.gz
cd hdf5-1.8.22
./configure --prefix=/home/wanzhou/soft/hdf5-1.8.22
./configure --prefix=/home/wanzhou/soft/hdf5-1.8.22 CC=gcc FC=gfortran CXX=g++ --enable-fortran --enable-fortran2003 --enable-cxxmake
make install

3、配置 HDF5 编译选项
关键配置选项

  • 安装路径:通过 --prefix 指定 HDF5 的安装目录。
  • 启用并行支持:通过 --enable-parallel 启用 MPI 支持(必须有 MPI 库,如 mpich 或 openmpi)。
  • 启用 Fortran 支持:通过 --enable-fortran 启用 Fortran 接口。
  • 编译器工具链:确保使用与 WRF 一致的编译器(如 gcc, gfortran, mpicc)。

配置命令(单机并行支持)

CC=mpicc FC=mpif90 ./configure --prefix=/home/wanzhou/soft/hdf5-1.8.20 \--enable-parallel \--enable-fortran

解释:

  • CC=mpicc:指定 C 编译器为 MPI 的 C 编译器(如 mpicc)。
  • FC=mpif90:指定 Fortran 编译器为 MPI 的 Fortran 编译器(如 mpif90)。
  • –prefix=/home/wanzhou/soft/hdf5-1.8.20:指定 HDF5 的安装目录。
  • –enable-parallel:启用并行支持(PHDF5)。
  • –enable-fortran:启用 Fortran 接口(WRF 需要)。

配置命令(无并行支持,仅编译串行版本 HDF5)
如果不需要并行支持,可以省略 --enable-parallel:

CC=gcc FC=gfortran ./configure --prefix=/home/wanzhou/soft/hdf5-1.8.20 \--enable-fortran

4、编译和安装 HDF5

编译 HDF5,运行以下命令开始编译:

make -j4

-j4:表示使用 4 个并行线程进行编译。可以根据你的 CPU 核心数调整这个值(如 -j8)。

安装 HDF5
在编译成功后,运行以下命令将 HDF5 安装到指定目录:

make install

检查安装
安装完成后,检查 HDF5 是否正确安装:

ls /home/wanzhou/soft/hdf5-1.8.20

你应该看到如下子目录:

  • bin:包含 HDF5 工具(如 h5cc, h5dump)。
  • lib:包含 HDF5 动态库文件(如 libhdf5.a, libhdf5.so)。
  • include:包含 HDF5 的头文件。

在这里插入图片描述

特别是 bin 中应该有工具文件:

ls /home/wanzhou/soft/hdf5-1.8.20/bin
h5cc  h5dump  h5ls

5、 配置环境变量

安装完成后,确保 HDF5 的路径已正确添加到环境变量中。将以下代码添加到 ~/.bashrc 文件中,并加载修改:

export HDF5_DIR=/home/wanzhou/soft/hdf5-1.8.20
export PATH=${HDF5_DIR}/bin:$PATH
export LD_LIBRARY_PATH=${HDF5_DIR}/lib:$LD_LIBRARY_PATH
export C_INCLUDE_PATH=${HDF5_DIR}/include:$C_INCLUDE_PATH
export CPLUS_INCLUDE_PATH=${HDF5_DIR}/include:$CPLUS_INCLUDE_PATH

6、验证 HDF5 并行支持

如果启用了并行支持(–enable-parallel),可以运行一个简单的测试用例来验证:

编写测试程序 test_hdf5.c:

#include "hdf5.h"
#include <mpi.h>
#include <stdio.h>int main(int argc, char **argv) {MPI_Init(&argc, &argv);H5open();printf("HDF5 parallel support enabled.\n");H5close();MPI_Finalize();return 0;
}

编译和运行测试程序:

mpicc -o test_hdf5 test_hdf5.c -lhdf5
mpirun -np 4 ./test_hdf5
mpirun -np 4 test_hdf5

如果输出:

HDF5 parallel support enabled.

说明 HDF5 并行支持正常工作。

错误原因1:提示 overflow 错误

HDF5 库安装失败,并且在 ./configure 阶段多次提示 overflow 错误,通常是由于以下原因之一导致的:

  • 依赖库或工具缺失:如编译器(gcc、gfortran)、MPI 库(mpich 或 openmpi)。
  • 编译器版本问题:部分 HDF5 版本对编译器版本有特殊要求。
  • 编译选项冲突或配置错误:./configure 提供的选项可能与系统环境或依赖库不兼容。
  • 系统环境变量问题:如未正确设置 CC(C 编译器)、FC(Fortran 编译器)、CFLAGS 等。

1. 检查系统是否缺少依赖库或工具

HDF5 的编译依赖以下工具和库,请确保它们已安装:

必备工具

  • C 编译器(如 gcc)
  • Fortran 编译器(如 gfortran)
  • MPI 库(如 mpich 或 openmpi,如果需要并行支持)

检查方法
运行以下命令查看是否安装了这些工具:

gcc --version
gfortran --version
mpicc --version
mpif90 --version

如果工具版本信息正确输出,则说明已安装成功。

2. 检查和更新编译器版本

部分 HDF5 版本可能需要特定版本的编译器。以下是推荐的版本范围:

  • GCC:建议使用 GCC 4.8 或更高版本。
  • GFortran:建议与 GCC 一致,版本需为 4.8 或更高。
  • MPI 编译器:建议使用与 GCC 兼容的 mpich 或 openmpi。

检查当前编译器版本,运行以下命令:

gcc --version
gfortran --version
mpicc --version

确认版本是否满足要求。

3. 检查 ./configure 报错信息

overflow 错误的常见原因
1、编译器优化选项不兼容:
HDF5 源代码中可能包含大数组或复杂计算,某些编译器(特别是高版本 GCC 或 Clang)会因优化选项而报溢出错误。
2、系统默认的 CFLAGS 或 FCFLAGS 设置有问题:
系统可能设置了过高的优化级别(如 -O3),导致编译失败。

解决方法
在运行 ./configure 时,手动设置编译器优化选项为较低级别(如 -O2 或 -O1):

CC=mpicc FC=mpif90 CFLAGS="-O2" FCFLAGS="-O2" ./configure --prefix=/home/wanzhou/soft/hdf5-1.8.20 \--enable-parallel \--enable-fortran

4. 检查系统环境变量

HDF5 编译依赖环境变量,如 CC、FC、CFLAGS、LDFLAGS 等。如果这些变量未正确设置,可能导致配置失败。

解决方法
在运行 ./configure 前,手动设置关键环境变量:

export CC=mpicc
export FC=mpif90
export CFLAGS="-O2"
export FCFLAGS="-O2"
export LDFLAGS="-L/usr/lib64 -L/usr/lib"
export CPPFLAGS="-I/usr/include"

5. 逐步定位问题

方法 1:检查 config.log
HDF5 的 ./configure 会生成一个 config.log 文件,记录配置过程的详细日志。

打开 config.log 文件,搜索关键字 “error” 或 “overflow”:

grep -i "error" config.log
grep -i "overflow" config.log

根据日志中的提示信息,定位是哪个库或函数导致问题。

方法 2:尝试最小化配置
运行 ./configure 时,临时禁用一些功能(如并行支持或 Fortran 支持),检查是否能通过配置。

CC=gcc FC=gfortran ./configure --prefix=/home/wanzhou/soft/hdf5-1.8.20

如果可以通过,那么问题可能出在 MPI 或其他高级功能上。

6. 重新下载 HDF5 源码并清理环境

如果多次尝试仍然失败,可以考虑重新下载 HDF5 源码,并清理之前的残留文件。

清理旧的编译文件
进入 HDF5 源码目录,运行以下命令:

make distclean

7. 检查编译器是否支持 64 位整数

HDF5 编译可能涉及大文件支持或 64 位整数支持。如果你的编译器不支持 64 位整数,这会导致 overflow 错误。

解决方法
在运行 ./configure 时,强制启用 64 位整数支持:

CC=mpicc FC=mpif90 CFLAGS="-O2 -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64" \FCFLAGS="-O2 -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64" \./configure --prefix=/home/wanzhou/soft/hdf5-1.8.20 \--enable-parallel \--enable-fortran

一番操作后,终于有HDF5库环境了(但此问题好像并不影响WRF编译):
在这里插入图片描述

参考

#hdf5
export HDF5_DIR=/home/wanzhou/soft/hdf5-1.8.20
export PATH=${HDF5_DIR}/bin:$PATH
export LD_LIBRARY_PATH=${HDF5_DIR}/lib:$LD_LIBRARY_PATH
export C_INCLUDE_PATH=${HDF5_DIR}/include:$C_INCLUDE_PATH
export CPLUS_INCLUDE_PATH=${HDF5_DIR}/include:$CPLUS_INCLUDE_PATHexport HDF5PATH=/home/wanzhou/soft/hdf5-1.8.20

.bashrc内容:

# ARWpost
export PATH=/home/wanzhou/wrf/ARWpost:$PATH# Conda
export PATH=/home/wanzhou/miniconda3/bin:$PATH
# export PATH=/home/wanzhou/miniconda3/pkgs/netcdf-fortran-4.6.1-mpi_mpich_h2e543cf_6/lib:$PATH# libtiff
export LIBTIFF_HOME=/home/wanzhou/miniconda3/pkgs/libtiff-4.5.0-h6adf6a1_2
export PATH=$LIBTIFF_HOME/bin:$PATH
export LD_LIBRARY_PATH=${LIBTIFF_HOME}/lib:$LD_LIBRARY_PATH
export INCLUDE=${LIBTIFF_HOME}/include:$INCLUDE# geotiff
export GEOTIFF_HOME=/home/wanzhou/miniconda3/pkgs/geotiff-1.7.0-h2a26cda_3
export PATH=$GEOTIFF_HOME/bin:$PATH
export LD_LIBRARY_PATH=${GEOTIFF_HOME}/lib:$LD_LIBRARY_PATH
export INCLUDE=${GEOTIFF_HOME}/include:$INCLUDE# WRF Domain Wizard环境设置
export PATH=/home/wanzhou/WRFDomainWizard:$PATH
#保存退出# 添加Java路径:
export JAVA_HOME=/home/wanzhou/Packages/jdk1.8.0_421
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JRE_HOME=$JAVA_HOME/jre

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/492317.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大模型微调---Prompt-tuning微调

目录 一、前言二、Prompt-tuning实战2.1、下载模型到本地2.2、加载模型与数据集2.3、处理数据2.4、Prompt-tuning微调2.5、训练参数配置2.6、开始训练 三、模型评估四、完整训练代码 一、前言 Prompt-tuning通过修改输入文本的提示&#xff08;Prompt&#xff09;来引导模型生…

【UE5】pmx导入UE5,套动作。(防止“气球人”现象。

参考视频&#xff1a;UE5Animation 16: MMD模型與動作導入 (繁中自動字幕) 问题所在&#xff1a; 做法记录&#xff08;自用&#xff09; 1.导入pmx&#xff0c;删除这两个。 2.转换给blender&#xff0c;清理节点。 3.导出时&#xff0c;内嵌贴图&#xff0c;选“复制”。 …

005 QT常用控件Qwidget_上

文章目录 前言控件概述QWidgetenable属性geometry属性windowTitle属性windowlcon属性 小结 前言 本文将会向你介绍常用的Qwidget属性 控件概述 Widget 是 Qt 中的核心概念. 英文原义是 “⼩部件”, 我们此处把它翻译为 “控件” . 控件是构成⼀个图形化界面的基本要素. QWi…

gitlab初始化+API批量操作

几年没接触gitlab了&#xff0c;新版本装完以后代码提交到默认的main分支&#xff0c;master不再是主分支 项目有几十个仓库&#xff0c;研发提交代码后仓库地址和之前的发生了变化 有几个点 需要注意 1、修改全局默认分支 2、关闭分支保护 上面修改了全局配置不会影响已经创…

如何用上AI视频工具Sora,基于ChatGPT升级Plus使用指南

没有GPT&#xff0c;可以参考这个教程&#xff1a;详情移步至底部参考原文查看哦~ 1.准备工作 详情移步至底部参考原文查看哦~ 详情移步至底部参考原文查看哦~ 4.Sora使用 详情移步至底部参考原文查看哦 参考文章&#xff1a;【包教包会】如何用上AI视频工具Sora&#xff…

如何查看K8S集群中service和pod定义的网段范围

在我们创建部署K8S集群的开头时候 不是需要在master节点上执行一条这样的命令嘛&#xff1f; kubeadm init --apiserver-advertise-address192.168.60.130 --control-plane-endpointcluster-master --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers -…

使用 Marp 将 Markdown 导出为 PPT 后不可编辑的原因说明及解决方案

Marp 是一个流行的 Markdown 演示文稿工具&#xff0c;能够将 Markdown 文件转换为 PPTX 格式。然而&#xff0c;用户在使用 Marp 导出 PPT 时&#xff0c;可能会遇到以下问题&#xff1a; 导出 PPT 不可直接编辑的原因 根据 Marp GitHub 讨论&#xff0c;Marp 导出的 PPTX 文…

redis 缓存使用

工具类 package org.springblade.questionnaire.redis;import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.beans.factor…

level2逐笔委托查询接口

沪深逐笔委托队列查询 前置步骤 分配数据库服务器 查询模板 以下是沪深委托队列查询的请求模板&#xff1a; http://<数据库服务器>/sql?modeorder_book&code<股票代码>&offset<offset>&token<token>查询参数说明 参数名类型说明mo…

游戏AI实现-寻路算法(DFS)

​深度优先搜索算法&#xff08;英语&#xff1a;Depth-First-Search&#xff0c;缩写为DFS&#xff09;是一种用于遍历或搜索树或图的算法。 寻路地图搭建&#xff1a; 游戏AI实现-寻路地图搭建-CSDN博客 算法过程&#xff1a;遍历方向为从竖直向上沿顺时针方向 1.首先将开…

Yolov3源码解析

1. 制作数据集 我做的是三目标检测&#xff0c;人狗马目标检测 然后使用精力标注助手对图像进行目标标注。到出为xml文件。 得到这样格式的数据集 1. 1 读取xml文件&#xff0c;求建议框&#xff0c;向量数据库 import os from xml.dom.minidom import parse from kmeans im…

《变形金刚:赛博坦的陨落》游戏启动难题:‘buddha.dll’缺失的七大修复策略

《变形金刚&#xff1a;赛博坦的陨落》游戏启动时提示buddha.dll缺失&#xff1a;原因与解决方案 作为一名软件开发从业者&#xff0c;我在日常工作中经常遇到电脑游戏运行时出现的各种问题&#xff0c;如文件丢失、文件损坏和系统报错等。今天&#xff0c;我们就来探讨一下《…

java全栈day16--Web后端实战(数据库)

一、数据库介绍 二、Mysql安装&#xff08;自行在网上找&#xff0c;教程简单&#xff09; 安装好了进行Mysql连接 连接语法&#xff1a;winr输入cmd&#xff0c;在命令行中再输入mysql -uroot -p密码 方法二&#xff1a;winr输入cmd&#xff0c;在命令行中再输入mysql -uroo…

简单配置,全面保护:HZERO审计服务让安全触手可及

HZERO技术平台&#xff0c;凭借多年企业资源管理实施经验&#xff0c;深入理解企业痛点&#xff0c;为您提供了一套高效易用的审计解决方案。这套方案旨在帮助您轻松应对企业开发中的审计挑战&#xff0c;确保业务流程的合规性和透明度。 接下来&#xff0c;我将为大家详细介绍…

Microi吾码|开源低代码.NET、VUE低代码项目,表单引擎介绍

Microi吾码&#xff5c;开源低代码.NET、VUE低代码项目&#xff0c;表单引擎介绍 一、摘要二、Microi吾码介绍2.1 功能介绍2.2 团队介绍2.3 上线项目案例 三、Microi吾码表单引擎是什么&#xff1f;四、Microi吾码表单引擎功能4.1 模块引擎 - 由表单引擎驱动4.2 流程引擎 - 由表…

Spring Cloud Sleuth 分布式链路追踪入门

您好&#xff0c;我是今夜写代码,今天学习下分布式链路组件Spring Cloud Sleuth。 本文内容 介绍了分布式链路的思想 Sleuth 和 Zipkin 简单集成Demo,并不涉及 Sleuth原理。 为什么要用链路追踪&#xff1f; 微服务架构下&#xff0c;一个复杂的电商应用&#xff0c;完成下…

低级计算机网络知识总结

1 应用层 1.1 HTTP(TCP) 浏览器访问WWW服务器过程&#xff1a;首先进行域名解析&#xff0c;然后通过TCP向服务器发送连接请求 HTTP本身是无连接&#xff0c;无状态的。无状态特性使服务器能够支持大量的并发HTTP请求。实际应用中&#xff0c;通常使用Cookie加数据库跟踪用户…

了解 SpringMVC 请求流程

文章目录 1. Spring 基础 - SpringMVC 请求流程1.1 引入1.2 什么是 MVC1.3 什么是 Spring MVC1.4 请求流程核心架构的具体流程步骤补充 1.5 案例**Maven 包引入****业务代码的编写**DaoServiceControllerwebapp 下的 web.xmlspringmvc.xmlJSP 视图 2. Spring 进阶 - Dispatcher…

基于Spring Boot的数码产品抢购系统

一、系统背景与目的 随着电子商务的快速发展&#xff0c;数码产品在线销售已成为主流趋势。然而&#xff0c;传统的数码产品销售方式存在抢购过程繁琐、库存管理混乱、用户体验不佳等问题。为了解决这些问题&#xff0c;基于Spring Boot的数码产品抢购系统应运而生。该系统旨在…

【MambaSR复现】【Windows系统下Mamba环境配置】triton 、causal conv1d和mamba_ssm模块配置保姆教程

注&#xff1a;在此之前确保环境中已经安装packaging模块 pip install packaging若此模块安装过程中出现图下报错&#xff1a;这是由于环境创建时候的权限问题导致的&#xff0c;具体解决方案见我另一篇博文&#xff01; 1.Triton模块安装 注意&#xff1a;必须先安装triton&…