问题现象
在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-dev
和libhdf5-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编译配置
在makefile
或cmake
配置中显式指定库路径:
# 示例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