Ubuntu 18.04运行h5dump提示libhdf5_serial.so.100缺失故障求助
Ubuntu 18.04 下 h5dump 报 libhdf5_serial.so.100 缺失的成因与修复
问题核心成因
本质是系统内HDF5组件的依赖版本错位,和你的安装操作没有关系,具体逻辑是:
- Ubuntu 18.04 发布初期,官方源中的HDF5版本为1.10.0,对应的运行时包名为
libhdf5-100;后续系统安全更新迭代HDF5到1.10.5版本后,运行时包名改为libhdf5-103,包拆分规则也做了调整,libhdf5-serial-dev开发库包并不会自动把对应的运行时依赖包全量部署到动态链接器的全局扫描路径,仅会把开发所需的符号链接放到/usr/lib/x86_64-linux-gnu/hdf5/serial路径下供编译使用 - 你通过默认源安装的
hdf5-tools包是18.04首发版本的构建产物,硬编码依赖libhdf5_serial.so.100这个具体版本的运行时文件,但当前系统实际安装的HDF5运行时库是迭代后的.so.103版本,且因为dev包的安装逻辑,相关文件没有落到全局动态链接扫描路径下,就会触发找不到目标文件的报错 - 之前你编译的C程序、Python的h5py库能正常读写HDF5文件,是因为这两类组件的库查找逻辑不会走系统全局动态链接的默认路径:C编译时会显式关联dev包提供的路径下的库文件,Python h5py是把对应的HDF5运行时库打包在自身的安装路径内,因此不会触发全局路径下的版本缺失问题
分步修复方案
- 第一步:先定位系统内现存的所有HDF5动态库文件,确认版本错位情况
执行命令:find /usr -name "libhdf5_serial*" 2>/dev/null
按你描述的排查结果,命令输出会显示当前系统实际存在的库文件后缀为103,没有任何带.100后缀的文件,完全匹配版本错位的判断 - 第二步:优先匹配版本对齐安装
因为当前默认源已经不再提供libhdf5-100包,直接安装libhdf5-100会报包找不到的错误,此时可以选择安装与当前hdf5-tools构建版本匹配的旧版运行时包,确认能满足h5dump的运行要求 - 第三步:在确认同大版本ABI兼容的前提下,通过软链接对齐硬编码依赖
因为h5dump依赖的HDF5 1.10.x 小版本之间ABI是完全兼容的,直接对现存的.so.103文件做软链接即可满足h5dump的查找要求:操作注意:跨大版本(比如HDF5 1.12.x)做软链接会导致程序直接崩溃,仅可在1.10.x 小版本差异下做软链接,不要随意链接更高大版本的库文件
依次执行命令完成链接和缓存刷新:sudo ln -s /usr/lib/x86_64-linux-gnu/libhdf5_serial.so.103.0.0 /usr/lib/x86_64-linux-gnu/libhdf5_serial.so.100 sudo ldconfig - 第四步:验证修复效果
执行h5dump --version,如果能正常输出版本号信息,说明依赖问题解决,可以正常使用h5dump完成HDF5文件的解析、导出操作
内容的提问来源于stack exchange,提问作者JeffR
相关产品推荐
相关产品推荐

