我正在尝试在(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_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.
设置
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 二进制文件的位置。
另一个对我有用的解决方案:清除 CMake 缓存。