Ubuntu20.04编译HDF-EOS2 Fortran版本遇gdopen未定义引用问题
解决HDF-EOS2 Fortran编译时
gdopen未定义引用问题 排查步骤与解决方案
1. 确认HDF-EOS2的Fortran接口是否正确编译
先检查HDF-EOS2安装目录的lib文件夹,确认libhdfeos.a中是否包含gdopen符号:
nm $HDFEOS_DIR/lib/libhdfeos.a | grep gdopen
如果输出为空,说明Fortran接口未正确编译,重新配置时注意:
- 配置选项应为
--enable-fortran(连字符格式,而非你之前用的下划线--enable_fortran,拼写错误会导致Fortran接口未启用) - 必须添加
--with-hdf4=$HDF4_DIR指定HDF4路径,HDF-EOS2的Fortran接口依赖HDF4的Fortran组件,未指定路径会导致编译时跳过相关逻辑
2. 调整编译链接的库顺序与依赖
HDF-EOS2依赖HDF4的Fortran库,修改编译命令,显式链接所有依赖库(注意GCC链接规则中,依赖库需放在源文件之后,被依赖的库要后置):
h4fc -fno-underscoring read_hdfeos.f90 -L$HDFEOS_DIR/lib -lhdfeos -lGctp -L$HDF4_DIR/lib -lmfhdf -ldf -o read_hdfeos.exe
3. 验证符号名匹配
由于你使用了-fno-underscoring,需确认库中gdopen的符号名与代码调用一致:
nm $HDFEOS_DIR/lib/libhdfeos.a | grep -i gdopen
如果输出符号为_gdopen(带下划线),说明HDF-EOS2编译时的符号规则与代码不匹配:
- 可尝试在编译HDF-EOS2时添加
-Df2cFortran选项,重新编译安装 - 或去掉代码编译时的
-fno-underscoring选项,适配库的符号规则
4. 重新编译HDF-EOS2的标准配置示例
建议用以下完整配置重新编译HDF-EOS2,确保所有依赖路径正确:
./configure --prefix=$HDFEOS_DIR \ CC=h4cc \ FC=h4fc \ --with-hdf4=$HDF4_DIR \ --with-szlib=$SZIP_DIR \ --enable-fortran
执行make && make install后,再重新编译你的Fortran代码。
内容的提问来源于stack exchange,提问作者magus_e
相关产品推荐
相关产品推荐

