compiler-errors - 无法使用 HDF5,因为它是由不同版本的 GNU Fortran 创建的
问题描述
我对 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 Free Software Foundation, Inc. 这是免费软件;查看复制条件的来源。没有保修;甚至不考虑适销性或特定用途的适用性。
但我不知道如何检查 anaconda 中 hdf5.mod 文件使用的版本。它来自 Anaconda 是否有问题?我需要安装另一个吗?如果是这样,怎么做?我必须以某种方式重建模块(这会弄乱一些python包)吗?也许我需要使用更多的标志?(我使用了我认为有意义的,类似于我在 github 上找到的 makefile,例如这个)
我也尝试修改一个示例Makefile,但我没有我所知道的 libz.a 或 libsz.a ,最后我得到了同样的错误。
我正在运行 Manjaro,以防万一。我还尝试使用 安装 HDF5 pacman -S hdf5
,它可以工作但没有改变任何东西。
编辑:事实证明,当您安装 Anaconda 时,它会将 acanconda3/bin 添加到路径的前面。这包含一个过时的 h5fc 版本,这就是混乱的来源。如果我使用 /usr/bin/h5fc 的输出,则编译运行没有任何问题。
解决方案
标志不会解决这个问题。您需要对程序中的所有模块使用相同版本的 gfortran。如果您想保留您的版本哦 HFD,您需要获得相同的 gfortran 版本。
.mod
您可以通过读取文件的第一行并读取模块编号来找出文件的 gfortran 版本。然后您可以继续查看此处的表格是否可以确定哪个 Fortran 编译器生成了“.mod”文件?
推荐阅读
- angular - Angular same route but different layout depending on logged in state
- angular - How to create multiple components with same logic or 1 component with multiple templates?
- linux - 找不到 yocto-bsp 命令
- python - 在 KMeans 中调用 model.labels 时出错
- html - 不允许启动 AudioContext。它必须在页面上的用户手势后恢复(或创建)
- python - 在我的项目中导入 Tensorflow 时出错
- typescript - 是否可以在索引签名类型中具有字段级别的泛型?
- typescript - 更改路由时是否应该从内存中释放组件?
- javascript - 从输入数字中查找数组中的下一个数字
- python - 如何解决与 win32types 相关的 PyInstaller 错误?