我对HDF5和Fortran 90都很陌生。我正在尝试编译一个没有HDF5就能正常运行的程序。我在网上发现,我需要使用命令h5fc -show中的标志,输出如下
x86_64-conda_cos6-linux-gnu-gfortran -i/home/tmph/anaconda3 3/lib/tmph/anaconda3 3/lib/tmph/anaconda3 3/libhdf5hl_fortran.a/home/tmph/anaconda3 3/lib/libhdf5_hl.a/home/tmph/anaconda3 3/lib/libhdf5 5_fortran.a/home/tmph/anaconda3 3/ -O2 - -Wl - -Wl -一般类型,-Wl - -Wl - -z,-z。-z,现在为-Wl,-禁用新dtags -Wl,-rpath,/home/tmph/anaconda3 3/lib-L/home/tmph/anaconda3 3/lib -lrt -lpthread -lz -ldl -lm -Wl,-rpath -Wl,/home/tmph/anaconda3 3/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致命错误:无法读取模块文件‘/home/tmph/anaconda3 3/include/hdf5.mod’,因为它是由不同版本的GNU编译终止创建的。
当我运行gfortran --version时,我得到了输出
GNU Fortran (GCC) 10.2.0版权(C) 2020自由软件基金会。这是自由软件,请参阅复制条件的来源。没有任何保证,即使是适销性或适合某一特定用途。
但我不知道如何在anaconda中检查hdf5.mod文件的版本。它来自Anaconda这一事实是否有问题?需要我再安装一个吗?如果是这样的话,是怎么做的?我必须以某种方式重新构建这个模块(这会不会把一些python包搞砸)?也许我需要用更多的旗子?(我使用了我认为有意义的文件,类似于我在github,举个例子上找到的makefiles )
我还尝试修改一个示例Makefile,但据我所知,我没有这样的libz.a或libsz.a,最后得到了相同的错误。
我在管理曼吉罗,以防这件事发生。我还试着用pacman -S hdf5安装pacman -S hdf5,但没有改变任何东西。
编辑:当您安装Anaconda时,它会在路径的前面添加acanconda3 3/bin。这包含了一个过时的版本的h5fc,这就是混乱的根源。如果我使用/usr/bin/h5fc的输出,那么编译就不会有任何问题。
发布于 2021-01-26 20:27:55
旗子解决不了这个问题。您需要对程序中的所有模块使用相同版本的gfortran。如果你想保持你的版本哦HFD,你需要得到相同的gfortran版本。
通过读取文件的前一行并读取模块号,您可以找到.mod文件的gfortran版本。然后,您可以继续到这里的表,是否可以确定哪个Fortran编译器生成了一个".mod“文件?
https://stackoverflow.com/questions/65908213
复制相似问题