【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
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.mzph.cn/pingmian/64097.shtml

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

相关文章

生成式 AI 在个人层面的认知与应用

随着生成式人工智能技术的不断成熟和创新&#xff0c;其在各行各业的应用正在逐步拓展&#xff0c;展现出巨大的潜力和价值。我国政策对生成式 AI的支持和鼓励&#xff0c;不仅是对其潜力的认可&#xff0c;更是对其未来在推动社会进步和经济发展中作用的肯定。然而&#xff0c…

泛型编程--

auto自动推导数据类型 函数模板 定义和调用 函数模板具体化 函数模板通用版本之外的一个特殊版本 函数模板 具体化函数 &#xff0c;它们的声明和定义都可以分开写。 声明 定义 函数模板写变量 模板参数缺省 类成员函数作为函数模板 类构造函数是函数模板 函数模板重载 函数模…

Qt编写RK3588视频播放器/支持RKMPP硬解/支持各种视音频文件和视频流/海康大华视频监控

一、前言 用ffmpeg做硬解码开发&#xff0c;参考自带的示例hw_decode.c即可&#xff0c;里面提供了通用的dxva2/d3d11va/vaapi这种系统层面封装的硬解码&#xff0c;也就是无需区分用的何种显卡&#xff0c;操作系统自动调度&#xff0c;基本上满足了各种场景的需要&#xff0…

迎接全新的 Kotlin 支持 – K2 模式:基本信息

K2 模式有什么作用&#xff1f; K2 模式是 IntelliJ IDEA 中 Kotlin 支持的新实现&#xff0c;它可以提高 IDE 的稳定性&#xff0c;同时也会为支持未来 Kotlin 语言功能奠定基础。 K2 模式与 Kotlin K2 编译器有什么区别&#xff1f; K2 编译器负责编译 Kotlin 语言 2.0 或…

设计模式の建造者适配器桥接模式

文章目录 前言一、建造者模式二、适配器模式2.1、对象适配器2.2、接口适配器 三、桥接模式 前言 本篇是关于设计模式中建造者模式、适配器模式&#xff08;3种&#xff09;、以及桥接模式的笔记。 一、建造者模式 建造者模式是属于创建型设计模式&#xff0c;通过一步步构建一个…

智能引导小车充电系统设计(论文+源码)

1总体方案设计 在16*16点阵LED字符显示器的设计中&#xff0c;系统总体框架如图2.4所示&#xff0c;包括单片机主控模复位电路模块、晶振电路模块、按键电路模块、LED点阵驱动电路模块&#xff0c;蓝牙模块等构成。系统功能实现主要是利用系统在软件程序编写过程中&#xff0c…

PCIe学习笔记

PCIE高速串行数据总线 当拿到一块板子 比如你要用到PCIE 首先要看这块板子的原理图 一般原理图写的是 PCI express 表示PCIE 以下是Netfpga为例下的PCIE插口元件原理图 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/01dc604fbdc847e8998a978c83c7b2eb.png 一般主…

RabbitMQ实现消息发送接收——实战篇(路由模式)

本篇博文将带领大家一起学习rabbitMQ如何进行消息发送接收&#xff0c;我也是在写项目的时候边学边写&#xff0c;有不足的地方希望在评论区留下你的建议&#xff0c;我们一起讨论学习呀~ 需求背景 先说一下我的项目需求背景&#xff0c;社区之间可以进行物资借用&#xff0c…

The Past, Present and Future of Apache Flink

摘要&#xff1a;本文整理自阿里云开源大数据负责人王峰&#xff08;莫问&#xff09;在 Flink Forward Asia 2024上海站主论坛开场的分享&#xff0c;今年正值Flink开源项目诞生的第10周年&#xff0c;借此时机&#xff0c;王峰回顾了Flink在过去10年的发展历程以及 Flink社区…

城市大脑新型智慧城市数据中台建设方案

建设背景与现状 随着城市化进程的加速&#xff0c;城市数据呈现出爆炸式增长&#xff0c;但数据的整合、共享和利用却面临诸多挑战。信息孤岛、数据冗余、管理分散等问题日益突出&#xff0c;制约了智慧城市的发展。为了解决这些问题&#xff0c;构建城市大脑新型智慧城市数据…

力扣-图论-12【算法学习day.62】

前言 ###我做这类文章一个重要的目的还是给正在学习的大家提供方向和记录学习过程&#xff08;例如想要掌握基础用法&#xff0c;该刷哪些题&#xff1f;&#xff09;我的解析也不会做的非常详细&#xff0c;只会提供思路和一些关键点&#xff0c;力扣上的大佬们的题解质量是非…

每日一站技術架構解析之-cc手機桌布網

# 網站技術架構解析&#xff1a; ## 一、整體架構概述https://tw.ccwallpaper.com是一個提供手機壁紙、桌布免費下載的網站&#xff0c;其技術架構設計旨在實現高效的圖片資源管理與用戶訪問體驗優化。 ### &#xff08;一&#xff09;前端展示 1. **HTML/CSS/JavaScript基礎構…

代码随想录算法训练营第三十二天|动态规划理论基础|LC509.肥波那些数|LC70.爬楼梯|LC746.使用最小花费爬楼梯

动态规划理论基础 解释&#xff1a;动态规划&#xff0c;英文&#xff1a;Dynamic Programming&#xff0c;简称DP&#xff1b;如果某一问题有很多重叠子问题&#xff0c;使用动态规划是最有效的。 动态规划五部曲&#xff1a; 1、确定dp数组&#xff08;dp table&#xff09;…

RabbitMQ Work Queues (工作队列模式) 使用案例

Hi~&#xff01;这里是奋斗的明志&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f331;&#x1f331;个人主页&#xff1a;奋斗的明志 &#x1f331;&#x1f331;所属专栏&#xff1a;RabbitMQ &#x1f4da;本系列文章为个人学…

【安卓开发】【Android Studio】启动时报错“Unable to access Android SDK add-on list”

一、问题描述 在启动Android Studio时&#xff0c;软件报错&#xff1a;Unable to access Android SDK add-on list&#xff0c;报错截图如下&#xff1a; 二、原因及解决方法 初步推测是由于网络节点延迟&#xff0c;无法接入谷歌导致的。点击Cancel取消即可。

掌握线性回归:从简单模型到多项式模型的综合指南

目录 一、说明 二、简单线性回归 三、线性回归的评估指标 3.1 线性回归中的假设 四、从头开始的简单线性回归代码 五、多元线性回归 六、多元线性回归代码 七、多项式线性回归 八、多项式线性回归代码 九、应用单变量多项式回归 十、改变多项式的次数 十一、多列多项式回归 一、…

sqlmap详解

一.sqlmap -u URL --forms sqlmap -u http://192.168.11.136:1337//978345210/index.php --forms 针对特定的 URL 进行 SQL 注入测试&#xff0c;特别是针对表单&#xff08;form&#xff09;的 POST 注入 forms&#xff1a;这个参数告诉 sqlmap 解析并测试目标 URL 中的表单…

OBS + SRS:打造专业级直播环境的入门指南

OBS SRS&#xff1a;打造专业级直播环境的入门指南 1. OBS简介2. OBS核心功能详解2.1 场景&#xff08;Scenes&#xff09;管理2.2 源&#xff08;Sources&#xff09;控制2.3 混音器功能2.4 滤镜与特效2.5 直播控制面板 3. OBS推流到SRS服务器配置指南3.1 环境准备3.2 OBS推流…

Vue组件相关记录

Vue组件开发 非单文件组件 创建组件api Vue.extend({}) const student Vue.extend({template: <div>{{studentName}} - {{age}}</div>,data() {return {studentName: jjking,age: 12}}})new Vue({el: #app,//局部注册components: {student: student}})不能使用e…

【潜意识Java】深入理解 Java 面向对象编程(OOP)

目录 什么是面向对象编程&#xff08;OOP&#xff09;&#xff1f; 1. 封装&#xff08;Encapsulation&#xff09; Java 中的封装 2. 继承&#xff08;Inheritance&#xff09; Java 中的继承 3. 多态&#xff08;Polymorphism&#xff09; Java 中的多态 4. 抽象&…