Ubuntu 20.04下安装HDFView 3.1.2后无法启动的问题咨询
HDFView deb包安装后无法启动的排查方案
针对deb包无报错安装、执行hdfview命令后无正常启动界面,运行环境为OpenJDK11、系统hdf5-1.10的场景,可按以下顺序排查解决:
第一步:抓取精确的启动报错信息
- 不要从系统应用菜单点击启动,直接在终端执行
hdfview,等待20-30秒,把终端输出的所有异常栈、错误提示完整记录,80%的启动故障可以直接从日志定位根因 - 如果执行命令后终端无任何输出就静默退出,先执行
which hdfview确认启动脚本路径。一般deb包安装后启动脚本会放在/usr/bin/hdfview,本质是指向安装目录的wrapper包装脚本,可以直接打开脚本检查Java调用参数、路径配置是否存在错配
第二步:定位版本兼容类问题
HDFView 3.1.2对运行时依赖有硬性版本匹配要求,和当前环境的默认组件版本极易出现适配问题:
- Java运行时兼容问题:HDFView 3.1.2的核心代码是面向JDK 8编译的,和OpenJDK 11的模块访问规则存在天然不兼容——JDK11之后默认禁止程序通过反射访问JDK内部API,很多时候会直接触发静默崩溃,没有明确的桌面弹窗提示
排查逻辑:检查启动脚本实际调用的Java路径,确认当前用的是否为OpenJDK11,如果是,可选择临时切换到openjdk-8-jre环境测试启动,无需卸载原有JDK版本 - 原生动态库链接错配:deb包安装的HDFView会自带编译匹配的HDF5动态库,默认存放在安装目录的lib文件夹下,但系统动态链接器会优先加载系统路径下安装的hdf5-1.10库,如果两者的ABI版本不兼容,就会触发
libhdf5.so.xx: version not found类的启动失败
排查逻辑:执行ldd <HDFView安装路径下的主执行文件> | grep hdf5,检查当前程序链接的libhdf5文件是来自系统路径还是HDFView自带的库目录。如果是系统路径的库,可临时执行export LD_LIBRARY_PATH=<HDFView自带lib目录路径>:$LD_LIBRARY_PATH调整动态库搜索优先级,再启动程序测试,能正常启动即可确认是链接优先级问题
第三步:针对性故障修复
- 修复JDK11兼容问题:如果确认不需要降级JDK版本,可直接编辑hdfview的启动脚本,在Java启动参数区域追加两个绕开模块访问限制的参数:
--add-opens java.base/java.util=ALL-UNNAMED--add-opens java.base/java.lang=ALL-UNNAMED
保存脚本后重新执行启动命令即可正常加载 - 修复动态库优先级问题:确认是链接到系统hdf5库导致的崩溃后,在hdfview启动脚本的环境变量配置区域,提前写入动态库路径优先级配置,确保程序优先加载和自身编译匹配的内置hdf5库
- 修复权限类故障:部分桌面环境下,用户目录下的HDFView配置文件夹存在读取/执行权限缺失问题,会导致程序初始化阶段崩溃,可执行
chmod -R u+x ~/.hdfview修复配置目录权限后再尝试启动
内容的提问来源于stack exchange,提问作者Pranto
相关产品推荐
相关产品推荐

