Ubuntu下编译ADCIRC报错”cannot find -lhdf5_fortran”的完整解决方案


阅读 2 次

问题现象

在Ubuntu系统上编译ADCIRC(带NetCDF支持的Fortran程序)时,遇到链接错误:

/usr/bin/ld: cannot find -lhdf5_fortran: No such file or directory
collect2: error: ld returned 1 exit status

快速诊断

这个错误表明链接器找不到HDF5的Fortran接口库。虽然已安装libhdf5-devlibhdf5-fortran-102,但系统仍无法定位库文件。

完整解决方案

第一步:验证库文件是否存在

sudo updatedb
locate libhdf5_fortran.so

如果找不到文件,说明库未正确安装。执行:

sudo apt-get install libhdf5-fortran-dev

第二步:创建符号链接(常见解决方案)

# 查找实际库路径
find /usr -name "*hdf5_fortran*" 2>/dev/null

# 假设找到路径为/usr/lib/x86_64-linux-gnu/libhdf5_fortran.so.103
sudo ln -s /usr/lib/x86_64-linux-gnu/libhdf5_fortran.so.103 /usr/lib/libhdf5_fortran.so

第三步:修改ADCIRC编译配置

makefilecmake配置中显式指定库路径:

# 示例makefile修改
LDFLAGS += -L/usr/lib/x86_64-linux-gnu -lhdf5_fortran

进阶排查

如果问题仍然存在,检查系统架构是否匹配:

# 查看已安装的HDF5 Fortran包
apt list --installed | grep hdf5

# 确认gfortran版本
gfortran --version

# 检查库依赖关系
ldd /path/to/libhdf5_fortran.so

环境变量方案

临时解决方案(适用于测试环境):

export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH

完整安装示例

以下是Ubuntu 20.04 LTS上的完整安装命令:

sudo apt update
sudo apt install -y gfortran libnetcdf-dev libnetcdff-dev \
    libhdf5-dev libhdf5-fortran-dev libhdf5-mpi-dev
sudo ldconfig