【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-fortran

wget 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-cxx

make
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
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

export 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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

51c嵌入式~单片机~合集3

我自己的原文哦~ https://blog.51cto.com/whaosoft/12362395 一、STM32代码远程升级之IAP编程 IAP是什么 有时项目上需要远程升级单片机程序&#xff0c;此时需要接触到IAP编程。 IAP即为In Application Programming&#xff0c;解释为在应用中编程&#xff0c;用户自己的…

LeetCode 11. 盛最多水的容器(超简单讲解)

11. 盛最多水的容器 题目示例示例1示例2 解题思路双指针实现设计 详细代码 题目 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多…

Spring Boot 集成 Elasticsearch怎样在不启动es的情况下正常启动服务

解释 在spingboot 集成es客户端后&#xff0c;每当服务启动时&#xff0c;服务默认都会查看es中是否已经创建了对应的索引&#xff0c;如果没有索引则创建。基于上面的规则我们可以通过配置不自动创建索引来达到在没有es服务的情况下正常启动服务。 解决办法 在entity类的Docu…

IOTIQS100芯片, TCP 发送数据+NSOSD,data要是hex16进制转换方法

命令&#xff1a;data以十六进制字符串格式发送的数据。 方法 代码 sprintf(temp, "%02X", data[i]);&#xff1a;将当前字节转换为两位宽的大写十六进制字符&#xff0c;并存储在 temp 中。如果需要小写字母&#xff0c;可以将格式说明符改为 "%02x"。 …

Python的3D可视化库【vedo】2-3 (plotter模块) 增删物体、控制相机

文章目录 4 Plotter类的方法4.3 渲染器内的物体操作4.3.1 添加物体4.3.2 移除物体4.3.3 渲染器的内容列表 4.4 相机控制4.4.1 访问相机对象4.4.2 重置相机状态4.4.3 移动相机位置4.4.4 改变相机焦点4.4.5 改变相机朝向的平面4.4.5 旋转相机4.4.6 对齐相机的上朝向4.4.7 缩放 ve…

Mumu模拟器12开启ADB调试方法

在使用安卓模拟器进行开发或调试时&#xff0c;ADB&#xff08;Android Debug Bridge&#xff09;是一项不可或缺的工具。大多数模拟器默认开启了ADB调试功能&#xff0c;但在安装最新版的 Mumu模拟器12 时&#xff0c;可能会遇到 adb devices 无法识别设备的问题。 问题描述 …

【OpenCV计算机视觉】图像处理——平滑

本篇文章记录我学习【OpenCV】图像处理中关于“平滑”的知识点&#xff0c;希望我的分享对你有所帮助。 目录 一、什么是平滑处理 1、平滑的目的是什么&#xff1f; 2、常见的图像噪声 &#xff08;1&#xff09;椒盐噪声 ​编辑&#xff08;2&#xff09; 高斯噪声 &a…

vue CSS 自定义宽高 翻页 剥离 效果

新增需求&#xff0c;客户需要类似PPT的剥离效果用于WEB页面翻页&#xff0c;查找资料后&#xff0c;参考下方的掘金博主的文章&#xff0c;并将HTML修改成vue的页面进行使用。其中宽度、高度改成了变量&#xff0c;样式style中的属性与宽高的关系整理成了公式进行动态计算。 …

单北斗+鸿蒙系统+国产芯片,遨游防爆手机自主可控“三保险”

在当今全球科技竞争日益激烈的背景下&#xff0c;技术自主可控的重要性愈发凸显。它不仅关乎国家安全&#xff0c;更是推动产业升级和经济发展的关键。特别是在一些特殊领域&#xff0c;如防爆通信&#xff0c;自主可控的技术更是不可或缺。遨游通讯推出了一款融合了单北斗、鸿…

Word2Vec:将词汇转化为向量的技术

文章目录 Word2Vec来龙去脉分层Softmax负采样 Word2Vec 下面的文章纯属笔记&#xff0c;看完后不会有任何收获&#xff0c;如果想理解这两种优化技术&#xff0c;给大家推荐一篇博客&#xff0c;讲的很好&#xff1a; 详解-----分层Softmax与负采样 来龙去脉 word2vec,即将词…

虚幻5描边轮廓材质

很多游戏内都有这种描边效果&#xff0c;挺实用也挺好看的&#xff0c;简单复刻一下 效果演示&#xff1a; Linethickness可以控制轮廓线条的粗细 这样连完&#xff0c;然后放到网格体细节的覆层材质上即可 可以自己更改粗细大小和颜色

websocket_asyncio

WebSocket 和 asyncio 指南 简介 本指南涵盖了使用 Python 中的 websockets 库进行 WebSocket 编程的基础知识&#xff0c;以及 asyncio 在异步非阻塞 I/O 中的作用。它提供了构建高效 WebSocket 服务端和客户端的知识&#xff0c;以及 asyncio 的特性和优势。 1. 什么是 WebS…

序列模型的使用示例

序列模型的使用示例 1 RNN原理1.1 序列模型的输入输出1.2 循环神经网络&#xff08;RNN&#xff09;1.3 RNN的公式表示2 数据的尺寸 3 PyTorch中查看RNN的参数4 PyTorch中实现RNN&#xff08;1&#xff09;RNN实例化&#xff08;2&#xff09;forward函数&#xff08;3&#xf…

Hadoop学习笔记(包括hadoop3.4.0集群安装)(黑马)

Hadoop学习笔记 0-前置章节-环境准备 0.1 环境介绍 配置环境&#xff1a;hadoop-3.4.0&#xff0c;jdk-8u171-linux-x64 0.2 VMware准备Linux虚拟机 0.2.1主机名、IP、SSH免密登录 1.配置固定IP地址&#xff08;root权限&#xff09; 开启master&#xff0c;修改主机名为…

【计算机网络】Layer4-Transport layer

目录 传输层协议How demultiplexing works in transport layer&#xff08;传输层如何进行分用&#xff09;分用&#xff08;Demultiplexing&#xff09;的定义&#xff1a;TCP/UDP段格式&#xff1a; UDPUDP的特点&#xff1a;UDP Format端口号Trivial File Transfer Protocol…

Android Studio创建新项目并引入第三方so外部aar库驱动NFC读写器读写IC卡

本示例使用设备&#xff1a;https://item.taobao.com/item.htm?spma21dvs.23580594.0.0.52de2c1bbW3AUC&ftt&id615391857885 一、打开Android Studio,点击 File> New>New project 菜单&#xff0c;选择 要创建的项目模版&#xff0c;点击 Next 二、输入项目名称…

【Linux】—简单实现一个shell(myshell)

大家好呀&#xff0c;我是残念&#xff0c;希望在你看完之后&#xff0c;能对你有所帮助&#xff0c;有什么不足请指正&#xff01;共同学习交流哦&#xff01; 本文由&#xff1a;残念ing原创CSDN首发&#xff0c;如需要转载请通知 个人主页&#xff1a;残念ing-CSDN博客&…

【Python爬虫系列】_032.Scrapy_全站爬取

课 程 推 荐我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)教程合集 👈👈

Android通过okhttp下载文件(本文案例 下载mp4到本地,并更新到相册)

使用步骤分为两步 第一步导入 okhttp3 依赖 第二步调用本文提供的 utils 第一步这里不做说明了&#xff0c;直接提供第二步复制即用 DownloadUtil 中 download 为下载文件 参数说明 这里主要看你把 destFileName 下载文件名称定义为什么后缀&#xff0c;比如我定义为 .mp4 下…

win10配置子系统Ubuntu子系统(无需通过Windows应用市场)实际操作记录

win10配置子系统Ubuntu子系统&#xff08;无需通过Windows应用市场&#xff09;实际操作记录 参考教程 : win10配置子系统Ubuntu子系统&#xff08;无需通过Windows应用市场&#xff09; - 一佳一 - 博客园 开启虚拟机服务的 以管理员方式运行PowerShell运行命令。 &#xf…