如何解决 CMake 错误“无法找到 MPI”

Ron*_*nan 4 cmake mpi ubuntu-20.04

我正在尝试在(48小时)全新的 ubuntu 20.04.3 安装上运行 CMakeLists.txt 文件。我在运行时不断收到以下错误cmake .

-- Could NOT find MPI_CXX (missing: MPI_CXX_WORKS)
CMake Error at /usr/share/cmake-3.16/Modules/FindPackageHandleStandardArgs.cmake:146 (message):
  Could NOT find MPI (missing: MPI_CXX_FOUND) (found version "3.1")
Call Stack (most recent call first):
  /usr/share/cmake-3.16/Modules/FindPackageHandleStandardArgs.cmake:393 (_FPHSA_FAILURE_MESSAGE)
  /usr/share/cmake-3.16/Modules/FindMPI.cmake:1688 (find_package_handle_standard_args)
  CMakeLists.txt:16 (find_package)


-- Configuring incomplete, errors occurred!
Run Code Online (Sandbox Code Playgroud)

据我所知,CMakeLists.txt 中的相关行如下:

# check MPI package...
find_package(MPI REQUIRED)
set(CMAKE_CXX_COMPILER mpicxx)
include_directories(${MPI_INCLUDE_DIR})
Run Code Online (Sandbox Code Playgroud)

我尝试通过 apt 安装来解决这个问题mpich。尽管安装有效并且运行mpich --version返回(如下),但错误仍然存​​在。

gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Run Code Online (Sandbox Code Playgroud)

cmake --version回报3.16.3

自从安装每个软件包以来,我已经重新启动了。我还添加到我的 ~/.bashrc

export PATH=$PATH:/usr/bin/mpicc
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/bin/mpicc
Run Code Online (Sandbox Code Playgroud)

这似乎也没有做任何事情(再次重新启动后)。

如果相关的话,我也通过apt安装了cmake, libboost-all-dev, cuda-10-1, libcudnn7, libblas-dev, liblapack-dev, mpi

我将不胜感激任何有关此事的帮助。

Iva*_*yev 6

使用CMAKE_PREFIX_PATH变量设置搜索路径。最佳实践是在命令行界面中设置该变量:

mkdir build
cd build
cmake -G "Unix Makefiles" .. -DCMAKE_PREFIX_PATH=path_to_mpi_lib
Run Code Online (Sandbox Code Playgroud)

无论如何,您可以在 find_package 命令之前设置以下变量来定位 MPI(来自 FindMPI.cmake 的描述):

``MPIEXEC_EXECUTABLE``
  Manually specify the location of ``mpiexec``.
``MPI_HOME``
  Specify the base directory of the MPI installation.
``ENV{MPI_HOME}``
  Environment variable to specify the base directory of the MPI installation.
``ENV{I_MPI_ROOT}``
  Environment variable to specify the base directory of the MPI installation.
Run Code Online (Sandbox Code Playgroud)