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

问题描述 投票:0回答:3

我正在尝试在(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!

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

# check MPI package...
find_package(MPI REQUIRED)
set(CMAKE_CXX_COMPILER mpicxx)
include_directories(${MPI_INCLUDE_DIR})

我尝试通过 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.

cmake --version
返回
3.16.3

安装每个软件包后我都重新启动了。我还添加到我的 ~/.bashrc

export PATH=$PATH:/usr/bin/mpicc
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/bin/mpicc

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

如果相关,我也通过apt安装了

cmake, libboost-all-dev, cuda-10-1, libcudnn7, libblas-dev, liblapack-dev, mpi

如果有任何帮助,我将不胜感激。

cmake mpi ubuntu-20.04
3个回答
5
投票

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

mkdir build
cd build
cmake -G "Unix Makefiles" .. -DCMAKE_PREFIX_PATH=path_to_mpi_lib

无论如何,您可以在 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.

2
投票

设置

CMAKE_PREFIX_PATH
并没有解决我的问题。我通过使用本期中提到的变量
CMAKE_C_COMPILER
CMAKE_CXX_COMPILE
解决了这个问题:https://github.com/3dem/relion/issues/702

因此,我的 cmake 命令现在看起来像:

cmake -DCMAKE_C_COMPILER=/home/user/opt/openmpi/bin/mpicc -DCMAKE_CXX_COMPILER=/home/user/opt/openmpi/bin/mpicxx .

,其中

/home/user/opt/openmpi/bin
是 MPI 二进制文件的位置。


0
投票

另一个对我有用的解决方案:清除 CMake 缓存。

© www.soinside.com 2019 - 2024. All rights reserved.