无法使用 HDF5,因为它是由不同版本的 GNU Fortran 创建的

问题描述 投票:0回答:2

我对 HDF5 和 Fortran 90 都很陌生。我正在尝试编译一个无需 HDF5 也能正常运行的程序。我在网上发现我需要使用命令

h5fc -show
中的标志,输出是这样的

x86_64-conda_cos6-linux-gnu-gfortran -I/home/tmph/anaconda3/include -L/home/tmph/anaconda3/lib /home/tmph/anaconda3/lib/libhdf5hl_fortran.a /home/tmph/anaconda3/lib/libhdf5_hl.a /home/tmph/anaconda3/lib/libhdf5_fortran.a /home/tmph/anaconda3/lib/libhdf5.a -L/home/tmph/anaconda3/lib -Wl,-O2 -Wl,--sort-common -Wl,--根据需要 -Wl,-z,relro -Wl,-z,now -Wl,--disable-new-dtags -Wl,-rpath,/home/tmph /anaconda3/lib -L/home/tmph/anaconda3/lib -lrt -lpthread -lz -ldl -lm -Wl,-rpath -Wl,/home/tmph/anaconda3/lib

(我的大部分日常工作实际上都是用 Python 进行的,因此使用 anaconda3)

我尝试编译

[...]
LDLIBS=-lhdf5_fortran -lhdf5 
LDINC=-I/home/tmph/anaconda3/include
LDFLAGS=-L/home/tmph/anaconda3/lib

$(OBJ_DIR)%.o: $(SRC_DIR)%.F90
    $(FC) $(FCFLAGS) $(LDINC) -c $< -J $(SRC_DIR) -o $@

exec: $(SOURCE_OBJECTS) $(MAIN_OBJECT)
    $(LC) $(FCFLAGS) $(LDINC) -o $(exec_name) $^ $(LDFLAGS) $(LDLIBS)

但是我遇到了错误

12 |使用HDF5 | 1 致命错误:无法读取在 (1) 打开的模块文件“/home/tmph/anaconda3/include/hdf5.mod”,因为它是 由不同版本的 GNU Fortran 编译创建的内容已终止。

当我运行

gfortran --version
我得到输出

GNU Fortran (GCC) 10.2.0 版权所有 (C) 2020 自由软件基金会, Inc. 这是免费软件;请参阅复制条件的来源。 没有保修;甚至不考虑适销性或适用性 特定目的。

但我不知道如何检查 anaconda 中的 hdf5.mod 文件使用的版本。它来自 Anaconda 是否有问题?我需要安装另一个吗?如果是这样,怎么办?我必须以某种方式重建模块(这会弄乱一些 python 包)吗?也许我需要使用更多的标志? (我使用了我认为有意义的那些,并且与我在 github 上找到的 makefile 类似,例如这个

我也尝试修改一个示例Makefile,但是我没有我知道的这样的libz.a或libsz.a,最后我得到了同样的错误。

我正在运行 Manjaro,以防万一。我还尝试使用

pacman -S hdf5
安装 HDF5,它可以工作,但没有改变任何东西。

编辑:事实证明,当您安装Anaconda时,它会将acanconda3/bin添加到路径的前面。其中包含 h5fc 的过时版本,这就是混乱的根源。如果我使用 /usr/bin/h5fc 的输出,那么编译运行不会出现任何问题。

compiler-errors fortran gfortran hdf5 fortran90
2个回答
0
投票

虽然我的解决方案有点通用,但我在这里写这篇文章是因为我遇到了类似的问题,并且无法通过 HDF5 安装和 Fortran 版本不匹配快速找到解决方案。

make clean && make distclean
autoreconf -ivf
对我来说很有效。


-1
投票

标志不能解决这个问题。您需要对程序中的所有模块使用相同版本的 gfortran。如果您想保留您的 HFD 版本,您需要获得相同的 gfortran 版本。

您可以通过读取文件的第一行并读取模块编号来找到

.mod
文件的 gfortran 版本。然后您可以继续查看此处的表格是否可以确定哪个 Fortran 编译器生成了“.mod”文件?

© www.soinside.com 2019 - 2024. All rights reserved.