代码之家  ›  专栏  ›  技术社区  ›  Flamefire

用CMake实现HDF5C++的串行化

  •  0
  • Flamefire  · 技术社区  · 6 年前

    我想在CMake的项目构建中使用HDF5C++绑定。所以我照常做:

    find_package (HDF5 REQUIRED COMPONENTS CXX)
    target_link_libraries(foo PUBLIC ${HDF5_LIBRARIES})
    target_include_directories(foo PUBLIC ${HDF5_INCLUDE_DIRS})
    

    在我们的集群(HPC)升级之前,这一点一直有效。 现在我在链接时出错:

    function MPI::Win::Set_name(char const*): error: undefined reference to 'MPI_Win_set_name'
    function MPI::Win::Set_attr(int, void const*): error: undefined reference to 'MPI_Win_set_attr'
    

    虽然HDF5的版本没有改变,但是新的版本似乎需要与MPI进行链接,CMAKE不会自动告诉我。

    我错过什么了吗?cmake findhdf5模块是否有缺陷,或者在以下情况下,我是否需要手动链接到MPI? HDF5_IS_PARALLEL 被设定了吗?怎么可能,我现在需要链接 我的 针对MPI的应用程序?

    我做了一些检查:

    • 两个hdf5库上的ldd都显示libmpi
    • 没有 -lmpi 在我的应用程序的任一系统上
    • HDF5 1.10.1用于这两个版本,都是基于OpenMPI 2.1.2和GCC 6.4.0构建的。
    • mpicxx -show 显示不同的输出:新的输出包括 -lmpi_cxx ,旧的不是。
    • h5c++ -show 似乎是一样的(当然还有其他一些途径)
    1 回复  |  直到 6 年前
        1
  •  0
  •   Flamefire    6 年前

    HDF_IS_PARALLEL

    grep MPI_* diff -qr
    g++ -E vimdiff mpi mpi.h

    https://www.hdfgroup.org/HDF5/release/cmakebuild.html HDF5_IS_PARALLEL