【问题标题】:problem with HDF5 linking in Fortran with mpif90 compiler使用 mpif90 编译器在 Fortran 中链接 HDF5 的问题
【发布时间】:2021-06-04 10:16:36
【问题描述】:

我正在运行一个用于模拟的 fortran 代码,并希望实现一个读取 h5 文件的子例程。即这个带有 readtable.F90 (https://github.com/evanoconnor/EOSdriver) 的 EOSdriver。

我已经安装了 hdf5-library(使用 mpif90 编译器),当我自己编译和运行 EOSdriver 时 - 它工作正常。但后来我通过添加 EOSdriver-files 更改了我的模拟代码的 makefile。添加了所有必要的 HDF5 标志。编译时没有问题。当我尝试链接文件以在模拟中使用 readtable 时,我以某种方式收到以下错误:

/usr/bin/ld: readtable.o: in function `readtable_': readtable.F90:(.text+0xda): undefined reference to `__h5lib_MOD_h5open_f'
/usr/bin/ld: readtable.F90:(.text+0x187): undefined reference to `__h5f_MOD_h5fopen_f'
/usr/bin/ld: readtable.F90:(.text+0x2aa): undefined reference to `__h5d_provisional_MOD_h5dread_integer_scalar'
/usr/bin/ld: readtable.F90:(.text+0x2ee): undefined reference to `__h5d_MOD_h5dopen_f'
/usr/bin/ld: readtable.F90:(.text+0x351): undefined reference to `__h5d_MOD_h5dclose_f'
/usr/bin/ld: readtable.F90:(.text+0x79e): undefined reference to `__h5_dble_interface_MOD_h5dread_double_3'
/usr/bin/ld: readtable.F90:(.text+0x115a): undefined reference to `__h5_dble_interface_MOD_h5dread_double_1'
/usr/bin/ld: readtable.F90:(.text+0x13ed): undefined reference to `__h5_dble_interface_MOD_h5dread_double_scalar'
/usr/bin/ld: readtable.F90:(.text+0x141a): undefined reference to `__h5f_MOD_h5fclose_f'
/usr/bin/ld: readtable.F90:(.text+0x1440): undefined reference to `__h5lib_MOD_h5close_f'
collect2: error: ld returned 1 exit status

我使用的链接命令是:

mpif90 -o ../relaxNS/relaxNS   -fdefault-real-8 -fdefault-double-8 -mcmodel=large -fopenmp -O3 -DEQMASS    -I/usr/local/include -L/usr/local -lhdf5_fortran -lhdf5 -lz apply_PBC.o (all.o-files...) readtable.o

我是否需要使用其他 hdf5 标志或这里可能出现什么问题?

【问题讨论】:

  • 我怀疑库相对于引用库定义的符号的目标文件的排序不正确。传统的链接器行为需要包含符号定义的库来遵循包含符号引用的目标代码。如果是这样 - 有很多重复 - 例如stackoverflow.com/questions/7036158/…

标签: linux linker fortran hdf5


【解决方案1】:

您的链接行中似乎缺少实际的库目录。

-L/usr/local/lib一样,所以完整的链接应该是

mpif90 -o ../relaxNS/relaxNS   -fdefault-real-8 -fdefault-double-8 -mcmodel=large -fopenmp -O3 -DEQMASS    -I/usr/local/include -L/usr/local/lib -lhdf5_fortran -lhdf5 -lz apply_PBC.o (all.o-files...) readtable.o

【讨论】:

    猜你喜欢
    • 2016-10-24
    • 2014-01-18
    • 2016-05-20
    • 2017-05-01
    • 1970-01-01
    • 2016-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多