目录
- 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