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

news2024/12/15 19:30:17

目录

  • 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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Flutter 内嵌 unity3d for android

前言&#xff1a; 最近刚整完 unity3d hybridCLR 更新代码和资源&#xff0c;我们 趁热打铁 将 Unity3D 嵌入 Flutter 应用中。实现在 Flutter 使用 Unity3D, 可以做 小游戏 大游戏&#xff1b; 之前都是 内嵌 Webview 来实现的。虽然 CocosCreator 做出来的效果也不错&#xf…

鸿蒙开发:一个轻盈的上拉下拉刷新组件

前言 老早之前开源了一个刷新组件&#xff0c;提供了很多常见的功能&#xff0c;也封装了List&#xff0c;Grid&#xff0c;WaterFlow&#xff0c;虽然功能多&#xff0c;但也冗余比较多&#xff0c;随着时间的前去&#xff0c;暴露的问题就慢慢增多&#xff0c;虽然我也提供了…

Oracle plsqldev1106 安装及TNS配置

Oracle plsqldev1106 安装及TNS配置 下载好安装包&#xff0c;直接双击安装 点击 I Agree 默认是C盘的&#xff0c;我改了D盘&#xff0c;根据自己实际情况修改 这里用默认的for current user 也可以&#xff0c;我选了for all user 点Finish&#xff0c;等待安装完成即可 …

【卷积神经网络】AlexNet实践

构建模型 模版搭建 # 定义一个AlexNet模型类def __init__(self):# 调用父类的构造函数&#xff08;如果继承自nn.Module的话&#xff09;super(AlexNet, self).__init__()# ReLU激活函数self.ReLU nn.ReLU()# 卷积层1&#xff1a;输入1个通道&#xff08;灰度图&#xff09;&a…

Linux驱动开发(13):输入子系统–按键输入实验

计算机的输入设备繁多&#xff0c;有按键、鼠标、键盘、触摸屏、游戏手柄等等&#xff0c;Linux内核为了能够将所有的输入设备进行统一的管理&#xff0c; 设计了输入子系统。为上层应用提供了统一的抽象层&#xff0c;各个输入设备的驱动程序只需上报产生的输入事件即可。 下…

计算机毕设-基于springboot的某学院兼职平台的设计与实现(附源码+lw+ppt+开题报告)

博主介绍&#xff1a;✌多个项目实战经验、多个大型网购商城开发经验、在某机构指导学员上千名、专注于本行业领域✌ 技术范围&#xff1a;Java实战项目、Python实战项目、微信小程序/安卓实战项目、爬虫大数据实战项目、Nodejs实战项目、PHP实战项目、.NET实战项目、Golang实战…

Unity3D仿星露谷物语开发3之动画系统初探

1、目标 我们希望使用已有的资源建一个动画demo&#xff0c;以此熟悉基于已有Animator/Animation资源的使用方法。 以Tree的动画系统为例&#xff0c;资源位于&#xff1a; 2、创建流程 &#xff08;1&#xff09;创建tree空对象 上面两个都是空对象。 &#xff08;2&#…

怎么禁用 vscode 中点击 go 包名时自动打开浏览器跳转到 pkg.go.dev

本文引用怎么禁用 vscode 中点击 go 包名时自动打开浏览器跳转到 pkg.go.dev 在 vscode 设置项中配置 gopls 的 ui.navigation.importShortcut 为 Definition 即可。 "gopls": {"ui.navigation.importShortcut": "Definition" }ui.navigation.i…

Java:183 基于SSM的高校食堂系统

项目介绍 基于SSM的食堂点餐系统 角色:管理员、用户、食堂 前台用户可以实现商品浏览&#xff0c;加入购物车&#xff0c;加入收藏&#xff0c;预定&#xff0c;选座&#xff0c;个人信息管理&#xff0c;收货信息管理&#xff0c;收藏管理&#xff0c;评论功能&#xff0c;…

[COLM 2024] V-STaR: Training Verifiers for Self-Taught Reasoners

本文是对 STaR 的改进方法&#xff0c;COLM 是 Conference On Language Models&#xff0c;大模型领域新出的会议&#xff0c;在国际上很知名&#xff0c;不过目前还没有被列入 ccf list&#xff08;新会议一般不会列入&#xff09;&#xff1b;作者来自高校、微软研究院和 Goo…

端点鉴别、安全电子邮件、TLS

文章目录 端点鉴别鉴别协议ap 1.0——发送者直接发送一个报文表明身份鉴别协议ap 2.0——ap1.0 的基础上&#xff0c;接收者对报文的来源IP地址进行鉴别鉴别协议ap 3.0——使用秘密口令&#xff0c;口令为鉴别者和被鉴别者之间共享的秘密鉴别协议ap 3.1——对秘密口令进行加密&…

电脑文件夹打不开了,能打开但是会闪退,提示“找不到iUtils.dll”是什么原因?

电脑运行时常见问题解析&#xff1a;文件夹打不开、闪退及“找不到iUtils.dll”报错 在使用电脑的过程中&#xff0c;我们可能会遇到文件夹打不开、软件闪退或系统报错等问题&#xff0c;特别是提示“找不到iUtils.dll”的报错&#xff0c;更是让人困惑不已。今天我将为大家详…

MATLAB图卷积神经网络GCN处理分子数据集节点分类研究

全文链接&#xff1a;https://tecdat.cn/?p38570 本文主要探讨了如何利用图卷积网络&#xff08;GCN&#xff09;对图中的节点进行分类。介绍了相关的数据处理、模型构建、训练及测试等环节&#xff0c;通过对分子数据集的操作实践&#xff0c;展示了完整的节点分类流程&#…

计算机网络-传输层 UDP协议

学习一个网络协议&#xff0c;主要就是学习“数据格式/报文格式” UDP的特点 UDP传输的过程类似于寄信. ⽆连接: 知道对端的IP和端⼝号就直接进⾏传输, 不需要建⽴连接; 不可靠: 没有确认机制, 没有重传机制; 如果因为⽹络故障该段⽆法发到对⽅, UDP协议层也不会给应 ⽤层返回任…

[OpenGL] Transform feedback 介绍以及使用示例

一、简介 本文介绍了 OpenGL 中 Transform Feedback 方法的基本概念和代码示例。 二、Transform Feedback 介绍 1. Transform Feedback 简介 根据 OpenGL-wiki&#xff0c;Transform Feedback 是捕获由顶点处理步骤&#xff08;vertex shader 和 geometry shader&#xff0…

拆解大语言模型RLHF中的PPO

** 拆解大语言模型RLHF中的PPO ** 参考链接&#xff1a;https://zhuanlan.zhihu.com/p/645225982 为什么大多数介绍RLHF的文章&#xff0c;一讲到PPO算法的细节就戛然而止了呢&#xff1f;要么直接略过&#xff0c;要么就只扔出一个PPO的链接。然而LLM PPO跟传统的PPO还是有…

arcGIS使用笔记(无人机tif合并、导出、去除黑边、重采样)

无人机航拍建图之后&#xff0c;通过大疆智图软件可以对所飞行的区域的进行拼图&#xff0c;但是如果需要对拼好的图再次合并&#xff0c;则需要利用到arcGIS软件。下面介绍arcGIS软件在这个过程中常用的操作。 1.导入tif文件并显示的方法&#xff1a;点击“”图标进行导入操作…

利用代理IP爬取Zillow房产数据用于数据分析

引言 最近数据分析的热度在编程社区不断攀升&#xff0c;有很多小伙伴都开始学习或从事数据采集相关的工作。然而&#xff0c;网站数据已经成为网站的核心资产&#xff0c;许多网站都会设置一系列很复杂的防范措施&#xff0c;阻止外部人员随意采集其数据。为了解决这个问题&a…

免费送源码:Java+B/S+MySQL 多元化智能选课系统的设计与实现 计算机毕业设计原创定制

摘 要 多元化智能选课系统使用Java语言的Springboot框架&#xff0c;采用MVVM模式进行开发&#xff0c;数据方面主要采用的是微软的Mysql关系型数据库来作为数据存储媒介&#xff0c;配合前台技术完成系统的开发。 论文主要论述了如何使用JAVA语言开发一个多元化智能选课系统&…

(九)机器学习 - 多项式回归

多项式回归&#xff08;Polynomial Regression&#xff09;是一种回归分析方法&#xff0c;它将自变量 xx 和因变量 yy 之间的关系建模为 nn 次多项式。多项式回归的目的是找到一个 nn 次多项式函数&#xff0c;使得这个函数能够最好地拟合给定的数据点。 多项式回归的数学表达…